Validates that real LLM providers can receive and reason about PDF documents extracted from + * tool call results via the synthetic UserMessage with XML correlation tags. + * + *
This test is NOT part of the CI suite. Run it manually to assess provider compatibility. + * Configure API keys via environment variables: + * + *
The user message has the structure {@code preamble + (xml-tag, content-block)*}, so it can + * carry documents from one or many tool call results. Use {@link + * #assertExtractedDocumentsUserMessage(ChatMessage, ExtractedDocument...)} to assert against any + * number of documents in one go. + */ +public final class ToolCallResultDocumentAssertions { + + static final String EXTRACTED_DOCUMENTS_PREAMBLE = "Documents extracted from tool call results:"; + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + private ToolCallResultDocumentAssertions() {} + + /** + * Locates the first Camunda document reference inside a serialized tool call result and + * deserializes it into the production {@link CamundaDocumentReferenceModel}. Recursively descends + * into objects/arrays until it finds an object carrying the {@code camunda.document.type} + * discriminator (set by {@code DocumentSerializer}). + * + *
Throws {@link AssertionError} if the text cannot be parsed as JSON or no document reference + * is present. + */ + public static CamundaDocumentReferenceModel parseDocumentReference(String toolResultText) { + final JsonNode root; + try { + root = OBJECT_MAPPER.readTree(toolResultText); + } catch (JsonProcessingException e) { + throw new AssertionError("Failed to parse tool result text as JSON: " + toolResultText, e); + } + + final JsonNode docNode = findFirstCamundaDocumentNode(root); + if (docNode == null) { + throw new AssertionError( + "No Camunda document reference found in tool result text: " + toolResultText); + } + + try { + return OBJECT_MAPPER.treeToValue(docNode, CamundaDocumentReferenceModel.class); + } catch (JsonProcessingException e) { + throw new AssertionError("Failed to deserialize Camunda document reference: " + docNode, e); + } + } + + /** + * Asserts that {@code message} is a {@link UserMessage} with the standard "extracted documents" + * structure: a preamble {@link TextContent} followed by an {@code (xml-tag, content-block)} pair + * per expected document. + * + *
The XML tag is built using the production {@link DocumentXmlTag}, so the assertion stays in + * sync with the production format. + */ + public static void assertExtractedDocumentsUserMessage( + ChatMessage message, ExtractedDocument... expectedDocuments) { + assertThat(message).isInstanceOf(UserMessage.class); + final var contents = ((UserMessage) message).contents(); + + assertThat(contents) + .as("expected preamble + 2 contents per document (%d documents)", expectedDocuments.length) + .hasSize(1 + 2 * expectedDocuments.length); + + assertThat(contents.get(0)) + .as("preamble TextContent") + .isInstanceOfSatisfying( + TextContent.class, tc -> assertThat(tc.text()).isEqualTo(EXTRACTED_DOCUMENTS_PREAMBLE)); + + for (int i = 0; i < expectedDocuments.length; i++) { + final var expected = expectedDocuments[i]; + final var expectedXml = expected.expectedXmlTag(); + final var tagIndex = 1 + 2 * i; + final var contentIndex = tagIndex + 1; + + assertThat(contents.get(tagIndex)) + .as("XML tag at index %d (document %d)", tagIndex, i) + .isInstanceOfSatisfying( + TextContent.class, tc -> assertThat(tc.text()).isEqualTo(expectedXml)); + + final var contentBlock = contents.get(contentIndex); + try { + expected.contentBlockAssertion().accept(contentBlock); + } catch (AssertionError e) { + throw new AssertionError( + "Content block at index %d (document %d) failed: %s" + .formatted(contentIndex, i, e.getMessage()), + e); + } + } + } + + /** + * Asserts a content block based on a coarse type/mime classification used by tool calling tests: + * + *
Test scenario: single tool call (SuperfluxProduct) followed by a final text response, user
+ * satisfied on first feedback.
+ */
+abstract class BaseWireFormatAiAgentJobWorkerTest extends BaseAiAgentJobWorkerTest {
+
+ protected static final String RESPONSE_TEXT = "The SuperfluxProduct of 5 and 3 is 24.";
+ protected static final String USER_PROMPT = "Calculate the superflux product of 5 and 3";
+
+ private static final String SCENARIO_NAME = "LLM Tool Call Flow";
+ private static final String AFTER_TOOL_CALL_STATE = "AfterToolCall";
+
+ // Token counts in stub responses: turn1 input=100 output=50, turn2 input=200 output=30
+ protected static final AgentMetrics EXPECTED_METRICS =
+ new AgentMetrics(2, new AgentMetrics.TokenUsage(300, 80));
+
+ protected int wireMockPort;
+
+ @BeforeEach
+ void captureWireMockPort(WireMockRuntimeInfo wireMockRuntimeInfo) {
+ wireMockPort = wireMockRuntimeInfo.getHttpPort();
+ }
+
+ /**
+ * Sets user feedback to "satisfied" before each test so the process completes without a follow-up
+ * loop. Runs after {@link
+ * io.camunda.connector.e2e.agenticai.aiagent.BaseAiAgentTest#openUserFeedbackJobWorker()} resets
+ * the reference to an empty map.
+ */
+ @BeforeEach
+ void setUserFeedbackToSatisfied() {
+ userFeedbackVariables.set(userSatisfiedFeedback());
+ }
+
+ /** The API path WireMock should intercept, e.g. {@code /v1/messages}. */
+ protected abstract String llmApiPath();
+
+ /** Response body for the first LLM call — must instruct the agent to call SuperfluxProduct. */
+ protected abstract String toolCallResponseBody();
+
+ /** Response body for the second LLM call — final text answer, no tool calls. */
+ protected abstract String finalResponseBody();
+
+ /**
+ * Adds provider-specific API key header matching to the stub, e.g. {@code x-api-key} for
+ * Anthropic or {@code Authorization: Bearer} for OpenAI.
+ */
+ protected abstract MappingBuilder withApiKeyHeaderMatcher(MappingBuilder stub);
+
+ protected void stubLlmApiForToolCallThenFinalResponse() {
+ stubFor(
+ withApiKeyHeaderMatcher(
+ post(urlEqualTo(llmApiPath()))
+ .inScenario(SCENARIO_NAME)
+ .whenScenarioStateIs(Scenario.STARTED)
+ .willReturn(
+ aResponse()
+ .withStatus(200)
+ .withHeader("Content-Type", "application/json")
+ .withBody(toolCallResponseBody()))
+ .willSetStateTo(AFTER_TOOL_CALL_STATE)));
+
+ stubFor(
+ withApiKeyHeaderMatcher(
+ post(urlEqualTo(llmApiPath()))
+ .inScenario(SCENARIO_NAME)
+ .whenScenarioStateIs(AFTER_TOOL_CALL_STATE)
+ .willReturn(
+ aResponse()
+ .withStatus(200)
+ .withHeader("Content-Type", "application/json")
+ .withBody(finalResponseBody()))));
+ }
+
+ protected ZeebeTest runToolCallScenario() throws Exception {
+ stubLlmApiForToolCallThenFinalResponse();
+ return createProcessInstance(Map.of("userPrompt", USER_PROMPT)).waitForProcessCompletion();
+ }
+}
diff --git a/connectors-e2e-test/connectors-e2e-test-agentic-ai/src/test/java/io/camunda/connector/e2e/agenticai/aiagent/wireformat/OpenAiChatCompletionsApiAiAgentJobWorkerTests.java b/connectors-e2e-test/connectors-e2e-test-agentic-ai/src/test/java/io/camunda/connector/e2e/agenticai/aiagent/wireformat/OpenAiChatCompletionsApiAiAgentJobWorkerTests.java
new file mode 100644
index 00000000000..585d8d8cf29
--- /dev/null
+++ b/connectors-e2e-test/connectors-e2e-test-agentic-ai/src/test/java/io/camunda/connector/e2e/agenticai/aiagent/wireformat/OpenAiChatCompletionsApiAiAgentJobWorkerTests.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information regarding copyright
+ * ownership. Camunda licenses this file to you under the Apache License,
+ * Version 2.0; you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.camunda.connector.e2e.agenticai.aiagent.wireformat;
+
+import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
+import static com.github.tomakehurst.wiremock.client.WireMock.verify;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.github.tomakehurst.wiremock.client.MappingBuilder;
+import io.camunda.connector.e2e.agenticai.assertj.JobWorkerAgentResponseAssert;
+import io.camunda.connector.test.utils.annotation.SlowTest;
+import java.util.Map;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Wire-format regression test for the OpenAI Chat Completions endpoint ({@code POST
+ * /v1/chat/completions}). Uses the {@code openaiCompatible} provider so the test exercises the same
+ * wire format that the {@code openai} discriminator produces with {@code apiFamily = COMPLETIONS}.
+ */
+@SlowTest
+public class OpenAiChatCompletionsApiAiAgentJobWorkerTests
+ extends BaseWireFormatAiAgentJobWorkerTest {
+
+ @Override
+ protected String llmApiPath() {
+ return "/v1/chat/completions";
+ }
+
+ @Override
+ protected Maphttps://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -337,9 +491,9 @@
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.endpoint",
- "label" : "Endpoint",
- "description" : "Specify Azure OpenAI endpoint. Details in the documentation.",
+ "id" : "provider.googleGenAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -347,41 +501,19 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.endpoint",
+ "name" : "provider.googleGenAi.projectId",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Azure OpenAI authentication strategy.",
- "value" : "apiKey",
- "group" : "provider",
- "binding" : {
- "name" : "provider.azureOpenAi.authentication.type",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "API key",
- "value" : "apiKey"
- }, {
- "name" : "Client credentials",
- "value" : "clientCredentials"
- } ]
- }, {
- "id" : "provider.azureOpenAi.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.googleGenAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -389,51 +521,42 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.apiKey",
+ "name" : "provider.googleGenAi.region",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "apiKey",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.clientId",
- "label" : "Client ID",
- "description" : "ID of a Microsoft Entra application",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.googleGenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientId",
+ "name" : "provider.googleGenAi.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.clientSecret",
- "label" : "Client secret",
- "description" : "Secret of a Microsoft Entra application",
+ "id" : "provider.googleGenAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -441,154 +564,167 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientSecret",
+ "name" : "provider.googleGenAi.authentication.jsonKey",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
+ "property" : "provider.googleGenAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.tenantId",
- "label" : "Tenant ID",
- "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "id" : "provider.googleGenAi.backend",
+ "label" : "Backend",
+ "description" : "Specify the Google GenAI backend to use.",
"optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "value" : "vertex",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.tenantId",
+ "name" : "provider.googleGenAi.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Developer API (Google AI Studio)",
+ "value" : "developer-api"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.authorityHost",
- "label" : "Authority host",
- "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.backend",
+ "label" : "Backend",
+ "description" : "Specify the OpenAI backend to use.",
+ "optional" : false,
+ "value" : "openai",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.authorityHost",
+ "name" : "provider.openai.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "OpenAI",
+ "value" : "openai"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ }, {
+ "name" : "Custom",
+ "value" : "custom"
+ } ]
}, {
- "id" : "provider.azureOpenAi.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the OpenAI authentication strategy.",
+ "value" : "apiKey",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.timeouts.timeout",
+ "name" : "provider.openai.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "openai",
"type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
- "id" : "provider.googleVertexAi.projectId",
- "label" : "Project ID",
- "description" : "Specify Google Cloud project ID",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.projectId",
+ "name" : "provider.openai.authentication.apiKey",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.region",
- "label" : "Region",
- "description" : "Specify the region where AI inference should take place",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.region",
+ "name" : "provider.openai.authentication.organizationId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Google Vertex AI authentication strategy.",
- "value" : "serviceAccountCredentials",
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.type",
+ "name" : "provider.openai.authentication.projectId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "Service account credentials",
- "value" : "serviceAccountCredentials"
- }, {
- "name" : "Application default credentials (Hybrid/Self-Managed only)",
- "value" : "applicationDefaultCredentials"
- } ]
+ "type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.jsonKey",
- "label" : "JSON key of the service account",
- "description" : "This is the key of the service account in JSON format.",
+ "id" : "provider.openai.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -596,24 +732,25 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.jsonKey",
+ "name" : "provider.openai.authentication.clientId",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.googleVertexAi.authentication.type",
- "equals" : "serviceAccountCredentials",
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "openai",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.apiKey",
- "label" : "OpenAI API key",
+ "id" : "provider.openai.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -621,47 +758,68 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.apiKey",
+ "name" : "provider.openai.authentication.clientSecret",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.organizationId",
- "label" : "Organization ID",
- "description" : "For members of multiple organizations. Details in the documentation.",
- "optional" : true,
+ "id" : "provider.openai.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.organizationId",
+ "name" : "provider.openai.authentication.tenantId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.projectId",
- "label" : "Project ID",
- "description" : "For accounts with multiple projects. Details in the documentation.",
+ "id" : "provider.openai.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.projectId",
+ "name" : "provider.openai.authentication.authorityHost",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -682,90 +840,77 @@
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.endpoint",
- "label" : "API endpoint",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.endpoint",
+ "name" : "provider.openai.apiFamily",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Specify an endpoint to use the connector with an OpenAI compatible API. ",
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
}, {
- "id" : "provider.openaiCompatible.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.openai.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional. Override the default OpenAI base URL (e.g. for an OpenAI proxy or gateway). Leave blank to use the SDK default.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.authentication.apiKey",
+ "name" : "provider.openai.endpoint",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Leave blank if using HTTP headers for authentication.
If an Authorization header is specified in the headers, then the API key is ignored.",
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.headers",
+ "id" : "provider.openai.headers",
"label" : "Headers",
"description" : "Map of HTTP headers to add to the request.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.headers",
+ "name" : "provider.openai.headers",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.queryParameters",
+ "id" : "provider.openai.queryParameters",
"label" : "Query Parameters",
"description" : "Map of query parameters to add to the request URL.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.queryParameters",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
- "group" : "provider",
- "binding" : {
- "name" : "provider.openaiCompatible.timeouts.timeout",
+ "name" : "provider.openai.queryParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -931,78 +1076,7 @@
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.azureOpenAi.model.deploymentName",
- "label" : "Model deployment name",
- "description" : "Specify the model deployment name. Details in the documentation.",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.deploymentName",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.maxTokens",
- "label" : "Maximum tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.maxTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.googleVertexAi.model.model",
+ "id" : "provider.googleGenAi.model.model",
"label" : "Model",
"description" : "Specify the model ID. Details in the documentation.",
"optional" : false,
@@ -1012,79 +1086,79 @@
"feel" : "optional",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.model",
+ "name" : "provider.googleGenAi.model.model",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "id" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"label" : "Maximum output tokens",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "name" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.temperature",
+ "id" : "provider.googleGenAi.model.parameters.temperature",
"label" : "Temperature",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.temperature",
+ "name" : "provider.googleGenAi.model.parameters.temperature",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topP",
+ "id" : "provider.googleGenAi.model.parameters.topP",
"label" : "top P",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topP",
+ "name" : "provider.googleGenAi.model.parameters.topP",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topK",
+ "id" : "provider.googleGenAi.model.parameters.topK",
"label" : "top K",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topK",
+ "name" : "provider.googleGenAi.model.parameters.topK",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
@@ -1162,91 +1236,19 @@
"tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.openaiCompatible.model.model",
- "label" : "Model",
- "description" : "Specify the model ID. Details in the documentation.",
- "optional" : false,
- "value" : "gpt-4o",
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.model",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "label" : "Maximum completion tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.customParameters",
+ "id" : "provider.openai.model.parameters.customParameters",
"label" : "Custom parameters",
"description" : "Map of additional request parameters to include.",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.openaiCompatible.model.parameters.customParameters",
+ "name" : "provider.openai.model.parameters.customParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -1703,7 +1705,7 @@
"id" : "version",
"label" : "Version",
"description" : "Version of the element template",
- "value" : "10",
+ "value" : "12",
"group" : "connector",
"binding" : {
"key" : "elementTemplateVersion",
diff --git a/connectors/agentic-ai/element-templates/agenticai-aiagent-outbound-connector.json b/connectors/agentic-ai/element-templates/agenticai-aiagent-outbound-connector.json
index a07015eb55f..3982bf9e981 100644
--- a/connectors/agentic-ai/element-templates/agenticai-aiagent-outbound-connector.json
+++ b/connectors/agentic-ai/element-templates/agenticai-aiagent-outbound-connector.json
@@ -5,7 +5,7 @@
"description" : "Execute a single AI-powered action with tool calling capabilities",
"keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
"documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-task/",
- "version" : 10,
+ "version" : 12,
"category" : {
"id" : "connectors",
"name" : "Connectors"
@@ -92,17 +92,11 @@
"name" : "AWS Bedrock",
"value" : "bedrock"
}, {
- "name" : "Azure OpenAI",
- "value" : "azureOpenAi"
- }, {
- "name" : "Google Vertex AI",
- "value" : "google-vertex-ai"
+ "name" : "Google GenAI",
+ "value" : "googleGenAi"
}, {
"name" : "OpenAI",
"value" : "openai"
- }, {
- "name" : "OpenAI Compatible",
- "value" : "openaiCompatible"
} ]
}, {
"id" : "provider.anthropic.endpoint",
@@ -121,6 +115,59 @@
"type" : "simple"
},
"type" : "String"
+ }, {
+ "id" : "provider.anthropic.backend",
+ "label" : "Backend",
+ "description" : "Specify the Anthropic backend to use.",
+ "optional" : false,
+ "value" : "direct",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.backend",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Direct (Anthropic API)",
+ "value" : "direct"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Google Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ } ]
+ }, {
+ "id" : "provider.anthropic.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Anthropic authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
"id" : "provider.anthropic.authentication.apiKey",
"label" : "Anthropic API key",
@@ -135,9 +182,116 @@
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "anthropic",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -316,9 +470,9 @@
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.endpoint",
- "label" : "Endpoint",
- "description" : "Specify Azure OpenAI endpoint. Details in the documentation.",
+ "id" : "provider.googleGenAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -326,41 +480,19 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.endpoint",
+ "name" : "provider.googleGenAi.projectId",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Azure OpenAI authentication strategy.",
- "value" : "apiKey",
- "group" : "provider",
- "binding" : {
- "name" : "provider.azureOpenAi.authentication.type",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "API key",
- "value" : "apiKey"
- }, {
- "name" : "Client credentials",
- "value" : "clientCredentials"
- } ]
- }, {
- "id" : "provider.azureOpenAi.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.googleGenAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -368,51 +500,42 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.apiKey",
+ "name" : "provider.googleGenAi.region",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "apiKey",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.clientId",
- "label" : "Client ID",
- "description" : "ID of a Microsoft Entra application",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.googleGenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientId",
+ "name" : "provider.googleGenAi.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.clientSecret",
- "label" : "Client secret",
- "description" : "Secret of a Microsoft Entra application",
+ "id" : "provider.googleGenAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -420,154 +543,167 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientSecret",
+ "name" : "provider.googleGenAi.authentication.jsonKey",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
+ "property" : "provider.googleGenAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.tenantId",
- "label" : "Tenant ID",
- "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "id" : "provider.googleGenAi.backend",
+ "label" : "Backend",
+ "description" : "Specify the Google GenAI backend to use.",
"optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "value" : "vertex",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.tenantId",
+ "name" : "provider.googleGenAi.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Developer API (Google AI Studio)",
+ "value" : "developer-api"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.authorityHost",
- "label" : "Authority host",
- "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.backend",
+ "label" : "Backend",
+ "description" : "Specify the OpenAI backend to use.",
+ "optional" : false,
+ "value" : "openai",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.authorityHost",
+ "name" : "provider.openai.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "OpenAI",
+ "value" : "openai"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ }, {
+ "name" : "Custom",
+ "value" : "custom"
+ } ]
}, {
- "id" : "provider.azureOpenAi.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the OpenAI authentication strategy.",
+ "value" : "apiKey",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.timeouts.timeout",
+ "name" : "provider.openai.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "openai",
"type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
- "id" : "provider.googleVertexAi.projectId",
- "label" : "Project ID",
- "description" : "Specify Google Cloud project ID",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.projectId",
+ "name" : "provider.openai.authentication.apiKey",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.region",
- "label" : "Region",
- "description" : "Specify the region where AI inference should take place",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.region",
+ "name" : "provider.openai.authentication.organizationId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Google Vertex AI authentication strategy.",
- "value" : "serviceAccountCredentials",
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.type",
+ "name" : "provider.openai.authentication.projectId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "Service account credentials",
- "value" : "serviceAccountCredentials"
- }, {
- "name" : "Application default credentials (Hybrid/Self-Managed only)",
- "value" : "applicationDefaultCredentials"
- } ]
+ "type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.jsonKey",
- "label" : "JSON key of the service account",
- "description" : "This is the key of the service account in JSON format.",
+ "id" : "provider.openai.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -575,24 +711,25 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.jsonKey",
+ "name" : "provider.openai.authentication.clientId",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.googleVertexAi.authentication.type",
- "equals" : "serviceAccountCredentials",
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "openai",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.apiKey",
- "label" : "OpenAI API key",
+ "id" : "provider.openai.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -600,47 +737,68 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.apiKey",
+ "name" : "provider.openai.authentication.clientSecret",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.organizationId",
- "label" : "Organization ID",
- "description" : "For members of multiple organizations. Details in the documentation.",
- "optional" : true,
+ "id" : "provider.openai.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.organizationId",
+ "name" : "provider.openai.authentication.tenantId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.projectId",
- "label" : "Project ID",
- "description" : "For accounts with multiple projects. Details in the documentation.",
+ "id" : "provider.openai.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.projectId",
+ "name" : "provider.openai.authentication.authorityHost",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -661,90 +819,77 @@
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.endpoint",
- "label" : "API endpoint",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.endpoint",
+ "name" : "provider.openai.apiFamily",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Specify an endpoint to use the connector with an OpenAI compatible API. ",
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
}, {
- "id" : "provider.openaiCompatible.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.openai.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional. Override the default OpenAI base URL (e.g. for an OpenAI proxy or gateway). Leave blank to use the SDK default.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.authentication.apiKey",
+ "name" : "provider.openai.endpoint",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Leave blank if using HTTP headers for authentication.
If an Authorization header is specified in the headers, then the API key is ignored.",
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.headers",
+ "id" : "provider.openai.headers",
"label" : "Headers",
"description" : "Map of HTTP headers to add to the request.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.headers",
+ "name" : "provider.openai.headers",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.queryParameters",
+ "id" : "provider.openai.queryParameters",
"label" : "Query Parameters",
"description" : "Map of query parameters to add to the request URL.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.queryParameters",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
- "group" : "provider",
- "binding" : {
- "name" : "provider.openaiCompatible.timeouts.timeout",
+ "name" : "provider.openai.queryParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -910,78 +1055,7 @@
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.azureOpenAi.model.deploymentName",
- "label" : "Model deployment name",
- "description" : "Specify the model deployment name. Details in the documentation.",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.deploymentName",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.maxTokens",
- "label" : "Maximum tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.maxTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.googleVertexAi.model.model",
+ "id" : "provider.googleGenAi.model.model",
"label" : "Model",
"description" : "Specify the model ID. Details in the documentation.",
"optional" : false,
@@ -991,79 +1065,79 @@
"feel" : "optional",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.model",
+ "name" : "provider.googleGenAi.model.model",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "id" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"label" : "Maximum output tokens",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "name" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.temperature",
+ "id" : "provider.googleGenAi.model.parameters.temperature",
"label" : "Temperature",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.temperature",
+ "name" : "provider.googleGenAi.model.parameters.temperature",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topP",
+ "id" : "provider.googleGenAi.model.parameters.topP",
"label" : "top P",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topP",
+ "name" : "provider.googleGenAi.model.parameters.topP",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topK",
+ "id" : "provider.googleGenAi.model.parameters.topK",
"label" : "top K",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topK",
+ "name" : "provider.googleGenAi.model.parameters.topK",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
@@ -1141,91 +1215,19 @@
"tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.openaiCompatible.model.model",
- "label" : "Model",
- "description" : "Specify the model ID. Details in the documentation.",
- "optional" : false,
- "value" : "gpt-4o",
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.model",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "label" : "Maximum completion tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.customParameters",
+ "id" : "provider.openai.model.parameters.customParameters",
"label" : "Custom parameters",
"description" : "Map of additional request parameters to include.",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.openaiCompatible.model.parameters.customParameters",
+ "name" : "provider.openai.model.parameters.customParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -1677,7 +1679,7 @@
"id" : "version",
"label" : "Version",
"description" : "Version of the element template",
- "value" : "10",
+ "value" : "12",
"group" : "connector",
"binding" : {
"key" : "elementTemplateVersion",
diff --git a/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-job-worker-hybrid.json b/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-job-worker-hybrid.json
index 26deb07fad6..3ca2a8afb8d 100644
--- a/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-job-worker-hybrid.json
+++ b/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-job-worker-hybrid.json
@@ -5,7 +5,7 @@
"description" : "Run a multi-step AI reasoning loop with dynamic tool selection",
"keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
"documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-subprocess/",
- "version" : 10,
+ "version" : 12,
"category" : {
"id" : "connectors",
"name" : "Connectors"
@@ -118,17 +118,11 @@
"name" : "AWS Bedrock",
"value" : "bedrock"
}, {
- "name" : "Azure OpenAI",
- "value" : "azureOpenAi"
- }, {
- "name" : "Google Vertex AI",
- "value" : "google-vertex-ai"
+ "name" : "Google GenAI",
+ "value" : "googleGenAi"
}, {
"name" : "OpenAI",
"value" : "openai"
- }, {
- "name" : "OpenAI Compatible",
- "value" : "openaiCompatible"
} ]
}, {
"id" : "provider.anthropic.endpoint",
@@ -147,6 +141,59 @@
"type" : "simple"
},
"type" : "String"
+ }, {
+ "id" : "provider.anthropic.backend",
+ "label" : "Backend",
+ "description" : "Specify the Anthropic backend to use.",
+ "optional" : false,
+ "value" : "direct",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.backend",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Direct (Anthropic API)",
+ "value" : "direct"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Google Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ } ]
+ }, {
+ "id" : "provider.anthropic.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Anthropic authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
"id" : "provider.anthropic.authentication.apiKey",
"label" : "Anthropic API key",
@@ -161,9 +208,116 @@
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "anthropic",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -342,9 +496,9 @@
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.endpoint",
- "label" : "Endpoint",
- "description" : "Specify Azure OpenAI endpoint. Details in the documentation.",
+ "id" : "provider.googleGenAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -352,41 +506,19 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.endpoint",
+ "name" : "provider.googleGenAi.projectId",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Azure OpenAI authentication strategy.",
- "value" : "apiKey",
- "group" : "provider",
- "binding" : {
- "name" : "provider.azureOpenAi.authentication.type",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "API key",
- "value" : "apiKey"
- }, {
- "name" : "Client credentials",
- "value" : "clientCredentials"
- } ]
- }, {
- "id" : "provider.azureOpenAi.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.googleGenAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -394,51 +526,42 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.apiKey",
+ "name" : "provider.googleGenAi.region",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "apiKey",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.clientId",
- "label" : "Client ID",
- "description" : "ID of a Microsoft Entra application",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.googleGenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientId",
+ "name" : "provider.googleGenAi.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.clientSecret",
- "label" : "Client secret",
- "description" : "Secret of a Microsoft Entra application",
+ "id" : "provider.googleGenAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -446,154 +569,167 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientSecret",
+ "name" : "provider.googleGenAi.authentication.jsonKey",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
+ "property" : "provider.googleGenAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.tenantId",
- "label" : "Tenant ID",
- "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "id" : "provider.googleGenAi.backend",
+ "label" : "Backend",
+ "description" : "Specify the Google GenAI backend to use.",
"optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "value" : "vertex",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.tenantId",
+ "name" : "provider.googleGenAi.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Developer API (Google AI Studio)",
+ "value" : "developer-api"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.authorityHost",
- "label" : "Authority host",
- "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.backend",
+ "label" : "Backend",
+ "description" : "Specify the OpenAI backend to use.",
+ "optional" : false,
+ "value" : "openai",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.authorityHost",
+ "name" : "provider.openai.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "OpenAI",
+ "value" : "openai"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ }, {
+ "name" : "Custom",
+ "value" : "custom"
+ } ]
}, {
- "id" : "provider.azureOpenAi.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the OpenAI authentication strategy.",
+ "value" : "apiKey",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.timeouts.timeout",
+ "name" : "provider.openai.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "openai",
"type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
- "id" : "provider.googleVertexAi.projectId",
- "label" : "Project ID",
- "description" : "Specify Google Cloud project ID",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.projectId",
+ "name" : "provider.openai.authentication.apiKey",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.region",
- "label" : "Region",
- "description" : "Specify the region where AI inference should take place",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.region",
+ "name" : "provider.openai.authentication.organizationId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Google Vertex AI authentication strategy.",
- "value" : "serviceAccountCredentials",
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.type",
+ "name" : "provider.openai.authentication.projectId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "Service account credentials",
- "value" : "serviceAccountCredentials"
- }, {
- "name" : "Application default credentials (Hybrid/Self-Managed only)",
- "value" : "applicationDefaultCredentials"
- } ]
+ "type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.jsonKey",
- "label" : "JSON key of the service account",
- "description" : "This is the key of the service account in JSON format.",
+ "id" : "provider.openai.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -601,24 +737,25 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.jsonKey",
+ "name" : "provider.openai.authentication.clientId",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.googleVertexAi.authentication.type",
- "equals" : "serviceAccountCredentials",
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "openai",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.apiKey",
- "label" : "OpenAI API key",
+ "id" : "provider.openai.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -626,47 +763,68 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.apiKey",
+ "name" : "provider.openai.authentication.clientSecret",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.organizationId",
- "label" : "Organization ID",
- "description" : "For members of multiple organizations. Details in the documentation.",
- "optional" : true,
+ "id" : "provider.openai.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.organizationId",
+ "name" : "provider.openai.authentication.tenantId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.projectId",
- "label" : "Project ID",
- "description" : "For accounts with multiple projects. Details in the documentation.",
+ "id" : "provider.openai.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.projectId",
+ "name" : "provider.openai.authentication.authorityHost",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -687,90 +845,77 @@
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.endpoint",
- "label" : "API endpoint",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.endpoint",
+ "name" : "provider.openai.apiFamily",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Specify an endpoint to use the connector with an OpenAI compatible API. ",
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
}, {
- "id" : "provider.openaiCompatible.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.openai.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional. Override the default OpenAI base URL (e.g. for an OpenAI proxy or gateway). Leave blank to use the SDK default.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.authentication.apiKey",
+ "name" : "provider.openai.endpoint",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Leave blank if using HTTP headers for authentication.
If an Authorization header is specified in the headers, then the API key is ignored.",
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.headers",
+ "id" : "provider.openai.headers",
"label" : "Headers",
"description" : "Map of HTTP headers to add to the request.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.headers",
+ "name" : "provider.openai.headers",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.queryParameters",
+ "id" : "provider.openai.queryParameters",
"label" : "Query Parameters",
"description" : "Map of query parameters to add to the request URL.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.queryParameters",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
- "group" : "provider",
- "binding" : {
- "name" : "provider.openaiCompatible.timeouts.timeout",
+ "name" : "provider.openai.queryParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -936,78 +1081,7 @@
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.azureOpenAi.model.deploymentName",
- "label" : "Model deployment name",
- "description" : "Specify the model deployment name. Details in the documentation.",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.deploymentName",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.maxTokens",
- "label" : "Maximum tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.maxTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.googleVertexAi.model.model",
+ "id" : "provider.googleGenAi.model.model",
"label" : "Model",
"description" : "Specify the model ID. Details in the documentation.",
"optional" : false,
@@ -1017,79 +1091,79 @@
"feel" : "optional",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.model",
+ "name" : "provider.googleGenAi.model.model",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "id" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"label" : "Maximum output tokens",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "name" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.temperature",
+ "id" : "provider.googleGenAi.model.parameters.temperature",
"label" : "Temperature",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.temperature",
+ "name" : "provider.googleGenAi.model.parameters.temperature",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topP",
+ "id" : "provider.googleGenAi.model.parameters.topP",
"label" : "top P",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topP",
+ "name" : "provider.googleGenAi.model.parameters.topP",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topK",
+ "id" : "provider.googleGenAi.model.parameters.topK",
"label" : "top K",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topK",
+ "name" : "provider.googleGenAi.model.parameters.topK",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
@@ -1167,91 +1241,19 @@
"tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.openaiCompatible.model.model",
- "label" : "Model",
- "description" : "Specify the model ID. Details in the documentation.",
- "optional" : false,
- "value" : "gpt-4o",
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.model",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "label" : "Maximum completion tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.customParameters",
+ "id" : "provider.openai.model.parameters.customParameters",
"label" : "Custom parameters",
"description" : "Map of additional request parameters to include.",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.openaiCompatible.model.parameters.customParameters",
+ "name" : "provider.openai.model.parameters.customParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -1708,7 +1710,7 @@
"id" : "version",
"label" : "Version",
"description" : "Version of the element template",
- "value" : "10",
+ "value" : "12",
"group" : "connector",
"binding" : {
"key" : "elementTemplateVersion",
diff --git a/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-outbound-connector-hybrid.json b/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-outbound-connector-hybrid.json
index 45ead89d618..030e626b39a 100644
--- a/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-outbound-connector-hybrid.json
+++ b/connectors/agentic-ai/element-templates/hybrid/agenticai-aiagent-outbound-connector-hybrid.json
@@ -5,7 +5,7 @@
"description" : "Execute a single AI-powered action with tool calling capabilities",
"keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
"documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-task/",
- "version" : 10,
+ "version" : 12,
"category" : {
"id" : "connectors",
"name" : "Connectors"
@@ -97,17 +97,11 @@
"name" : "AWS Bedrock",
"value" : "bedrock"
}, {
- "name" : "Azure OpenAI",
- "value" : "azureOpenAi"
- }, {
- "name" : "Google Vertex AI",
- "value" : "google-vertex-ai"
+ "name" : "Google GenAI",
+ "value" : "googleGenAi"
}, {
"name" : "OpenAI",
"value" : "openai"
- }, {
- "name" : "OpenAI Compatible",
- "value" : "openaiCompatible"
} ]
}, {
"id" : "provider.anthropic.endpoint",
@@ -126,6 +120,59 @@
"type" : "simple"
},
"type" : "String"
+ }, {
+ "id" : "provider.anthropic.backend",
+ "label" : "Backend",
+ "description" : "Specify the Anthropic backend to use.",
+ "optional" : false,
+ "value" : "direct",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.backend",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Direct (Anthropic API)",
+ "value" : "direct"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Google Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ } ]
+ }, {
+ "id" : "provider.anthropic.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Anthropic authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
"id" : "provider.anthropic.authentication.apiKey",
"label" : "Anthropic API key",
@@ -140,9 +187,116 @@
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "anthropic",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -321,9 +475,9 @@
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.endpoint",
- "label" : "Endpoint",
- "description" : "Specify Azure OpenAI endpoint. Details in the documentation.",
+ "id" : "provider.googleGenAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -331,41 +485,19 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.endpoint",
+ "name" : "provider.googleGenAi.projectId",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Azure OpenAI authentication strategy.",
- "value" : "apiKey",
- "group" : "provider",
- "binding" : {
- "name" : "provider.azureOpenAi.authentication.type",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "API key",
- "value" : "apiKey"
- }, {
- "name" : "Client credentials",
- "value" : "clientCredentials"
- } ]
- }, {
- "id" : "provider.azureOpenAi.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.googleGenAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -373,51 +505,42 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.apiKey",
+ "name" : "provider.googleGenAi.region",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "apiKey",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.clientId",
- "label" : "Client ID",
- "description" : "ID of a Microsoft Entra application",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.googleGenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientId",
+ "name" : "provider.googleGenAi.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.clientSecret",
- "label" : "Client secret",
- "description" : "Secret of a Microsoft Entra application",
+ "id" : "provider.googleGenAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -425,154 +548,167 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.clientSecret",
+ "name" : "provider.googleGenAi.authentication.jsonKey",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
+ "property" : "provider.googleGenAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "googleGenAi",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.azureOpenAi.authentication.tenantId",
- "label" : "Tenant ID",
- "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "id" : "provider.googleGenAi.backend",
+ "label" : "Backend",
+ "description" : "Specify the Google GenAI backend to use.",
"optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "value" : "vertex",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.tenantId",
+ "name" : "provider.googleGenAi.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Vertex AI",
+ "value" : "vertex"
+ }, {
+ "name" : "Developer API (Google AI Studio)",
+ "value" : "developer-api"
+ } ]
}, {
- "id" : "provider.azureOpenAi.authentication.authorityHost",
- "label" : "Authority host",
- "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.backend",
+ "label" : "Backend",
+ "description" : "Specify the OpenAI backend to use.",
+ "optional" : false,
+ "value" : "openai",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.authentication.authorityHost",
+ "name" : "provider.openai.backend",
"type" : "zeebe:input"
},
"condition" : {
- "allMatch" : [ {
- "property" : "provider.azureOpenAi.authentication.type",
- "equals" : "clientCredentials",
- "type" : "simple"
- }, {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- } ]
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "OpenAI",
+ "value" : "openai"
+ }, {
+ "name" : "Azure AI Foundry",
+ "value" : "foundry"
+ }, {
+ "name" : "Custom",
+ "value" : "custom"
+ } ]
}, {
- "id" : "provider.azureOpenAi.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
+ "id" : "provider.openai.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the OpenAI authentication strategy.",
+ "value" : "apiKey",
"group" : "provider",
"binding" : {
- "name" : "provider.azureOpenAi.timeouts.timeout",
+ "name" : "provider.openai.authentication.type",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "azureOpenAi",
+ "equals" : "openai",
"type" : "simple"
},
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
}, {
- "id" : "provider.googleVertexAi.projectId",
- "label" : "Project ID",
- "description" : "Specify Google Cloud project ID",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.projectId",
+ "name" : "provider.openai.authentication.apiKey",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.region",
- "label" : "Region",
- "description" : "Specify the region where AI inference should take place",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.region",
+ "name" : "provider.openai.authentication.organizationId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.type",
- "label" : "Authentication",
- "description" : "Specify the Google Vertex AI authentication strategy.",
- "value" : "serviceAccountCredentials",
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.type",
+ "name" : "provider.openai.authentication.projectId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "google-vertex-ai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
- "type" : "Dropdown",
- "choices" : [ {
- "name" : "Service account credentials",
- "value" : "serviceAccountCredentials"
- }, {
- "name" : "Application default credentials (Hybrid/Self-Managed only)",
- "value" : "applicationDefaultCredentials"
- } ]
+ "type" : "String"
}, {
- "id" : "provider.googleVertexAi.authentication.jsonKey",
- "label" : "JSON key of the service account",
- "description" : "This is the key of the service account in JSON format.",
+ "id" : "provider.openai.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -580,24 +716,25 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.googleVertexAi.authentication.jsonKey",
+ "name" : "provider.openai.authentication.clientId",
"type" : "zeebe:input"
},
"condition" : {
"allMatch" : [ {
- "property" : "provider.googleVertexAi.authentication.type",
- "equals" : "serviceAccountCredentials",
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
"type" : "simple"
}, {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "openai",
"type" : "simple"
} ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.apiKey",
- "label" : "OpenAI API key",
+ "id" : "provider.openai.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
"optional" : false,
"constraints" : {
"notEmpty" : true
@@ -605,47 +742,68 @@
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.apiKey",
+ "name" : "provider.openai.authentication.clientSecret",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.organizationId",
- "label" : "Organization ID",
- "description" : "For members of multiple organizations. Details in the documentation.",
- "optional" : true,
+ "id" : "provider.openai.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.organizationId",
+ "name" : "provider.openai.authentication.tenantId",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
- "id" : "provider.openai.authentication.projectId",
- "label" : "Project ID",
- "description" : "For accounts with multiple projects. Details in the documentation.",
+ "id" : "provider.openai.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openai.authentication.projectId",
+ "name" : "provider.openai.authentication.authorityHost",
"type" : "zeebe:input"
},
"condition" : {
- "property" : "provider.type",
- "equals" : "openai",
- "type" : "simple"
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
},
"type" : "String"
}, {
@@ -666,90 +824,77 @@
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.endpoint",
- "label" : "API endpoint",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.endpoint",
+ "name" : "provider.openai.apiFamily",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Specify an endpoint to use the connector with an OpenAI compatible API. ",
- "type" : "String"
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
}, {
- "id" : "provider.openaiCompatible.authentication.apiKey",
- "label" : "API key",
+ "id" : "provider.openai.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional. Override the default OpenAI base URL (e.g. for an OpenAI proxy or gateway). Leave blank to use the SDK default.",
"optional" : true,
"feel" : "optional",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.authentication.apiKey",
+ "name" : "provider.openai.endpoint",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
- "tooltip" : "Leave blank if using HTTP headers for authentication.
If an Authorization header is specified in the headers, then the API key is ignored.",
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.headers",
+ "id" : "provider.openai.headers",
"label" : "Headers",
"description" : "Map of HTTP headers to add to the request.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.headers",
+ "name" : "provider.openai.headers",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.openaiCompatible.queryParameters",
+ "id" : "provider.openai.queryParameters",
"label" : "Query Parameters",
"description" : "Map of query parameters to add to the request URL.",
"optional" : true,
"feel" : "required",
"group" : "provider",
"binding" : {
- "name" : "provider.openaiCompatible.queryParameters",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.timeouts.timeout",
- "label" : "Timeout",
- "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
- "optional" : true,
- "feel" : "optional",
- "group" : "provider",
- "binding" : {
- "name" : "provider.openaiCompatible.timeouts.timeout",
+ "name" : "provider.openai.queryParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -915,78 +1060,7 @@
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.azureOpenAi.model.deploymentName",
- "label" : "Model deployment name",
- "description" : "Specify the model deployment name. Details in the documentation.",
- "optional" : false,
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.deploymentName",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.maxTokens",
- "label" : "Maximum tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.maxTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.azureOpenAi.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.azureOpenAi.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "azureOpenAi",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.googleVertexAi.model.model",
+ "id" : "provider.googleGenAi.model.model",
"label" : "Model",
"description" : "Specify the model ID. Details in the documentation.",
"optional" : false,
@@ -996,79 +1070,79 @@
"feel" : "optional",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.model",
+ "name" : "provider.googleGenAi.model.model",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"type" : "String"
}, {
- "id" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "id" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"label" : "Maximum output tokens",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "name" : "provider.googleGenAi.model.parameters.maxOutputTokens",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.temperature",
+ "id" : "provider.googleGenAi.model.parameters.temperature",
"label" : "Temperature",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.temperature",
+ "name" : "provider.googleGenAi.model.parameters.temperature",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topP",
+ "id" : "provider.googleGenAi.model.parameters.topP",
"label" : "top P",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topP",
+ "name" : "provider.googleGenAi.model.parameters.topP",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.googleVertexAi.model.parameters.topK",
+ "id" : "provider.googleGenAi.model.parameters.topK",
"label" : "top K",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.googleVertexAi.model.parameters.topK",
+ "name" : "provider.googleGenAi.model.parameters.topK",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "google-vertex-ai",
+ "equals" : "googleGenAi",
"type" : "simple"
},
"tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
@@ -1146,91 +1220,19 @@
"tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
"type" : "Number"
}, {
- "id" : "provider.openaiCompatible.model.model",
- "label" : "Model",
- "description" : "Specify the model ID. Details in the documentation.",
- "optional" : false,
- "value" : "gpt-4o",
- "constraints" : {
- "notEmpty" : true
- },
- "feel" : "optional",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.model",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "type" : "String"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "label" : "Maximum completion tokens",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.temperature",
- "label" : "Temperature",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.temperature",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.topP",
- "label" : "top P",
- "optional" : true,
- "feel" : "required",
- "group" : "model",
- "binding" : {
- "name" : "provider.openaiCompatible.model.parameters.topP",
- "type" : "zeebe:input"
- },
- "condition" : {
- "property" : "provider.type",
- "equals" : "openaiCompatible",
- "type" : "simple"
- },
- "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
- "type" : "Number"
- }, {
- "id" : "provider.openaiCompatible.model.parameters.customParameters",
+ "id" : "provider.openai.model.parameters.customParameters",
"label" : "Custom parameters",
"description" : "Map of additional request parameters to include.",
"optional" : true,
"feel" : "required",
"group" : "model",
"binding" : {
- "name" : "provider.openaiCompatible.model.parameters.customParameters",
+ "name" : "provider.openai.model.parameters.customParameters",
"type" : "zeebe:input"
},
"condition" : {
"property" : "provider.type",
- "equals" : "openaiCompatible",
+ "equals" : "openai",
"type" : "simple"
},
"type" : "String"
@@ -1682,7 +1684,7 @@
"id" : "version",
"label" : "Version",
"description" : "Version of the element template",
- "value" : "10",
+ "value" : "12",
"group" : "connector",
"binding" : {
"key" : "elementTemplateVersion",
diff --git a/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-job-worker-10.json b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-job-worker-10.json
new file mode 100644
index 00000000000..77b7001b799
--- /dev/null
+++ b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-job-worker-10.json
@@ -0,0 +1,1803 @@
+{
+ "$schema" : "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
+ "name" : "AI Agent Sub-process",
+ "id" : "io.camunda.connectors.agenticai.aiagent.jobworker.v1",
+ "description" : "Run a multi-step AI reasoning loop with dynamic tool selection",
+ "keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
+ "documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-subprocess/",
+ "version" : 10,
+ "category" : {
+ "id" : "connectors",
+ "name" : "Connectors"
+ },
+ "appliesTo" : [ "bpmn:SubProcess" ],
+ "elementType" : {
+ "value" : "bpmn:AdHocSubProcess"
+ },
+ "engines" : {
+ "camunda" : "^8.10"
+ },
+ "groups" : [ {
+ "id" : "provider",
+ "label" : "Model provider",
+ "openByDefault" : false
+ }, {
+ "id" : "model",
+ "label" : "Model",
+ "openByDefault" : false
+ }, {
+ "id" : "systemPrompt",
+ "label" : "System prompt",
+ "tooltip" : "A system prompt is a set of foundational instructions given to a model before any user interaction begins. It defines the AI agent’s role, behavior, tone, and communication style, ensuring that responses remain consistent and aligned with the AI agent’s intended purpose. These instructions help shape how the model interprets and responds to user input throughout the conversation.",
+ "openByDefault" : false
+ }, {
+ "id" : "userPrompt",
+ "label" : "User prompt",
+ "tooltip" : "A user prompt is the message or question you give to the AI to start or continue a conversation. It tells the AI what you need, whether it's information, help with a task, or just a chat. The AI uses your prompt to understand how to respond.",
+ "openByDefault" : false
+ }, {
+ "id" : "tools",
+ "label" : "Tools",
+ "tooltip" : "Tools are optional features the AI Agent can use to perform specific tasks. Configure this if the agent should participate in a tools feedback loop.",
+ "openByDefault" : false
+ }, {
+ "id" : "memory",
+ "label" : "Memory",
+ "tooltip" : "Configuration of the Agent's short-term/conversational memory.",
+ "openByDefault" : false
+ }, {
+ "id" : "limits",
+ "label" : "Limits",
+ "openByDefault" : false
+ }, {
+ "id" : "events",
+ "label" : "Event handling",
+ "tooltip" : "Configure how event sub-process results are handled. Results are added as user messages to the running agent.",
+ "openByDefault" : false
+ }, {
+ "id" : "response",
+ "label" : "Response",
+ "tooltip" : "Configuration of the model response format and how to map the model response to the connector result.
Depending on the selection, the model response will be available as response.responseText or response.responseJson.
See documentation for details.",
+ "openByDefault" : false
+ }, {
+ "id" : "connector",
+ "label" : "Connector"
+ }, {
+ "id" : "output",
+ "label" : "Output mapping"
+ }, {
+ "id" : "error",
+ "label" : "Error handling"
+ }, {
+ "id" : "retries",
+ "label" : "Retries"
+ } ],
+ "properties" : [ {
+ "value" : "io.camunda.agenticai:aiagent-job-worker:1",
+ "binding" : {
+ "property" : "type",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "outputCollection",
+ "binding" : {
+ "property" : "outputCollection",
+ "type" : "zeebe:adHoc"
+ },
+ "value" : "toolCallResults",
+ "type" : "Hidden"
+ }, {
+ "id" : "outputElement",
+ "binding" : {
+ "property" : "outputElement",
+ "type" : "zeebe:adHoc"
+ },
+ "value" : "={\n id: toolCall._meta.id,\n name: toolCall._meta.name,\n content: toolCallResult\n}",
+ "type" : "Hidden"
+ }, {
+ "id" : "provider.type",
+ "label" : "Provider",
+ "description" : "Specify the LLM provider to use.",
+ "value" : "anthropic",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Anthropic",
+ "value" : "anthropic"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Azure OpenAI",
+ "value" : "azureOpenAi"
+ }, {
+ "name" : "Google Vertex AI",
+ "value" : "google-vertex-ai"
+ }, {
+ "name" : "OpenAI",
+ "value" : "openai"
+ }, {
+ "name" : "OpenAI Compatible",
+ "value" : "openaiCompatible"
+ } ]
+ }, {
+ "id" : "provider.anthropic.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional custom API endpoint",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.apiKey",
+ "label" : "Anthropic API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: eu-west-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy. Learn more at the documentation page",
+ "value" : "credentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "API Key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "provider.bedrock.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key tailored to a user, equipped with the necessary permissions",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.apiKey",
+ "label" : "API Key",
+ "description" : "Provide an API Key with permissions to interact with your AWS Bedrock Instance",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.endpoint",
+ "label" : "Endpoint",
+ "description" : "Specify Azure OpenAI endpoint. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Azure OpenAI authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
+ }, {
+ "id" : "provider.azureOpenAi.authentication.apiKey",
+ "label" : "API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
+ }, {
+ "id" : "provider.googleVertexAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.authentication.jsonKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.googleVertexAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "OpenAI API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.organizationId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.apiFamily",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
+ }, {
+ "id" : "provider.openaiCompatible.endpoint",
+ "label" : "API endpoint",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Specify an endpoint to use the connector with an OpenAI compatible API. ",
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Leave blank if using HTTP headers for authentication.
If an Authorization header is specified in the headers, then the API key is ignored.",
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.headers",
+ "label" : "Headers",
+ "description" : "Map of HTTP headers to add to the request.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.headers",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.queryParameters",
+ "label" : "Query Parameters",
+ "description" : "Map of query parameters to add to the request URL.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.queryParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "placeholder" : "claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.model",
+ "label" : "Model",
+ "description" : "Specify an inference profile ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "placeholder" : "global.anthropic.claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to allow in the generated response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.azureOpenAi.model.deploymentName",
+ "label" : "Model deployment name",
+ "description" : "Specify the model deployment name. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.deploymentName",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.azureOpenAi.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.azureOpenAi.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "label" : "Maximum output tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "value" : "gpt-4o",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.model.parameters.maxCompletionTokens",
+ "label" : "Maximum completion tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.maxCompletionTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "value" : "gpt-4o",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
+ "label" : "Maximum completion tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.customParameters",
+ "label" : "Custom parameters",
+ "description" : "Map of additional request parameters to include.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.customParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.systemPrompt.prompt",
+ "label" : "System prompt",
+ "optional" : false,
+ "value" : "=\"You are **TaskAgent**, a helpful, generic chat agent that can handle a wide variety of customer requests using your own domain knowledge **and** any tools explicitly provided to you at runtime.\n\nIf tools are provided, you should prefer them instead of guessing an answer. You can call the same tool multiple times by providing different input values. Don't guess any tools which were not explicitly configured. If no tool matches the request, try to generate an answer. If you're not able to find a good answer, return with a message stating why you're not able to.\n\nWrap minimal, inspectable reasoning in *exactly* this XML template:\n\ncontext variable which is returned from the agent response. See documentation for details.",
+ "type" : "Text"
+ }, {
+ "id" : "data.memory.storage.type",
+ "label" : "Memory storage type",
+ "description" : "Specify how to store the conversation memory.",
+ "value" : "in-process",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "In Process (part of agent context)",
+ "value" : "in-process"
+ }, {
+ "name" : "Camunda Document Storage",
+ "value" : "camunda-document"
+ }, {
+ "name" : "AWS AgentCore Memory",
+ "value" : "aws-agentcore"
+ }, {
+ "name" : "Custom Implementation (Hybrid/Self-Managed only)",
+ "value" : "custom"
+ } ]
+ }, {
+ "id" : "data.memory.storage.timeToLive",
+ "label" : "Document TTL",
+ "description" : "How long to retain the conversation document as ISO-8601 duration (example: P14D).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.timeToLive",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "tooltip" : "Will use the cluster default TTL (time-to-live) if not specified. Make sure to set this value to a reasonable duration matching your process lifecycle.",
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.customProperties",
+ "label" : "Custom document properties",
+ "description" : "An optional map of custom properties to be stored with the conversation document.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.customProperties",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: us-east-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy for AgentCore Memory access.",
+ "value" : "credentials",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "data.memory.storage.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key with permissions for bedrock-agentcore:CreateEvent and bedrock-agentcore:ListEvents",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.memoryId",
+ "label" : "Memory ID",
+ "description" : "The ID of the pre-provisioned AgentCore Memory resource.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.memoryId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.actorId",
+ "label" : "Actor ID",
+ "description" : "Identifier of the actor associated with events (e.g., end-user or agent/user combination).",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.actorId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.storeType",
+ "label" : "Implementation type",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.storeType",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.parameters",
+ "label" : "Parameters",
+ "description" : "Parameters for the custom memory storage implementation.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.parameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.contextWindowSize",
+ "label" : "Context window size",
+ "description" : "Maximum number of recent conversation messages which are passed to the model.",
+ "optional" : false,
+ "value" : 20,
+ "feel" : "static",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.contextWindowSize",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "Use this to limit the number of messages which are sent to the model. The agent will only send the most recent messages up to the configured limit to the LLM. Older messages will be kept in the conversation store, but not sent to the model. See documentation for details.",
+ "type" : "Number"
+ }, {
+ "id" : "data.limits.maxModelCalls",
+ "label" : "Maximum model calls",
+ "description" : "Maximum number of calls to the model as a safety limit to prevent infinite loops.",
+ "optional" : false,
+ "value" : 10,
+ "feel" : "static",
+ "group" : "limits",
+ "binding" : {
+ "name" : "data.limits.maxModelCalls",
+ "type" : "zeebe:input"
+ },
+ "type" : "Number"
+ }, {
+ "id" : "data.events.behavior",
+ "label" : "Event handling behavior",
+ "description" : "Behavior on completing an event sub-process.",
+ "optional" : false,
+ "value" : "WAIT_FOR_TOOL_CALL_RESULTS",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "group" : "events",
+ "binding" : {
+ "name" : "data.events.behavior",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Wait for tool call results",
+ "value" : "WAIT_FOR_TOOL_CALL_RESULTS"
+ }, {
+ "name" : "Cancel tool calls",
+ "value" : "INTERRUPT_TOOL_CALLS"
+ } ]
+ }, {
+ "id" : "data.response.format.type",
+ "label" : "Response format",
+ "description" : "Specify the response format. Support for JSON mode varies by provider.",
+ "value" : "text",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Text",
+ "value" : "text"
+ }, {
+ "name" : "JSON",
+ "value" : "json"
+ } ]
+ }, {
+ "id" : "data.response.format.parseJson",
+ "label" : "Parse text as JSON",
+ "description" : "Tries to parse the LLM response text as JSON object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.parseJson",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "text",
+ "type" : "simple"
+ },
+ "tooltip" : "Use this option in combination with models which don't support native JSON mode/structured tool calling (e.g. Anthropic). Make sure to instruct the model to return valid JSON in the system prompt. The parsed JSON will be available as response.responseJson.
If parsing fails, null will be returned as JSON response, but the text content will still be available as response.responseText.",
+ "type" : "Boolean"
+ }, {
+ "id" : "data.response.format.schema",
+ "label" : "Response JSON schema",
+ "description" : "An optional response JSON Schema to instruct the model how to structure the JSON output.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schema",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "tooltip" : "If supported by the model, the response will be structured according to the provided schema. A parsed version of the response will be available as response.responseJson.",
+ "type" : "String"
+ }, {
+ "id" : "data.response.format.schemaName",
+ "label" : "Response JSON schema name",
+ "description" : "An optional name for the response JSON Schema to make the model aware of the expected output.",
+ "optional" : true,
+ "value" : "Response",
+ "feel" : "optional",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schemaName",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.response.includeAssistantMessage",
+ "label" : "Include assistant message",
+ "description" : "Include the full assistant message as part of the result object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.includeAssistantMessage",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "In addition to the text content, the assistant message may include multiple additional content blocks and metadata (such as token usage). The message will be available as response.responseMessage.",
+ "type" : "Boolean"
+ }, {
+ "id" : "data.response.includeAgentContext",
+ "label" : "Include agent context",
+ "description" : "Include the agent context as part of the result object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.includeAgentContext",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "Use this option if you need to re-inject the previous agent context into a future agent execution, for example when modeling a user feedback loop between an agent and a user task.",
+ "type" : "Boolean"
+ }, {
+ "id" : "version",
+ "label" : "Version",
+ "description" : "Version of the element template",
+ "value" : "10",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateVersion",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "id",
+ "label" : "ID",
+ "description" : "ID of the element template",
+ "value" : "io.camunda.connectors.agenticai.aiagent.jobworker.v1",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateId",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "resultVariable",
+ "label" : "Result variable",
+ "description" : "Name of variable to store the response in. Details in the documentation.",
+ "value" : "agent",
+ "group" : "output",
+ "binding" : {
+ "source" : "=agent",
+ "type" : "zeebe:output"
+ },
+ "type" : "String"
+ }, {
+ "id" : "errorExpression",
+ "label" : "Error expression",
+ "description" : "Expression to handle errors. Details in the documentation.",
+ "feel" : "required",
+ "group" : "error",
+ "binding" : {
+ "key" : "errorExpression",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Text"
+ }, {
+ "id" : "retryCount",
+ "label" : "Retries",
+ "description" : "Number of retries",
+ "value" : "3",
+ "feel" : "optional",
+ "group" : "retries",
+ "binding" : {
+ "property" : "retries",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "String"
+ }, {
+ "id" : "retryBackoff",
+ "label" : "Retry backoff",
+ "description" : "ISO-8601 duration to wait between retries",
+ "value" : "PT0S",
+ "group" : "retries",
+ "binding" : {
+ "key" : "retryBackoff",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "String"
+ }, {
+ "binding" : {
+ "name" : "agent",
+ "type" : "zeebe:input"
+ },
+ "type" : "Hidden"
+ } ],
+ "icon" : {
+ "contents" : "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiNBNTZFRkYiLz4KPG1hc2sgaWQ9InBhdGgtMi1vdXRzaWRlLTFfMTg1XzYiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjQiIHk9IjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iYmxhY2siPgo8cmVjdCBmaWxsPSJ3aGl0ZSIgeD0iNCIgeT0iNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIvPgo8L21hc2s+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC4wMTA1IDEyLjA5ODdDMTguNDkgMTAuNTg5NCAxNy4xNTk0IDguMTA4MTQgMTYuMTc5OSA2LjAxMTAzQzE2LjE1MiA2LjAwNDUxIDE2LjExNzYgNiAxNi4wNzk0IDZDMTYuMDQxMSA2IDE2LjAwNjYgNi4wMDQ1MSAxNS45Nzg4IDYuMDExMDRDMTQuOTk5NCA4LjEwODE0IDEzLjY2OTcgMTAuNTg4OSAxMi4xNDgxIDEyLjA5ODFDMTAuNjI2OSAxMy42MDcxIDguMTI1NjggMTQuOTI2NCA2LjAxMTU3IDE1Ljg5ODFDNi4wMDQ3NCAxNS45MjYxIDYgMTUuOTYxMSA2IDE2QzYgMTYuMDM4NyA2LjAwNDY4IDE2LjA3MzYgNi4wMTE0NCAxNi4xMDE0QzguMTI1MTkgMTcuMDcyOSAxMC42MjYyIDE4LjM5MTkgMTIuMTQ3NyAxOS45MDE2QzEzLjY2OTcgMjEuNDEwNyAxNC45OTk2IDIzLjg5MiAxNS45NzkxIDI1Ljk4OUMxNi4wMDY4IDI1Ljk5NTYgMTYuMDQxMSAyNiAxNi4wNzkzIDI2QzE2LjExNzUgMjYgMTYuMTUxOSAyNS45OTU0IDE2LjE3OTYgMjUuOTg5QzE3LjE1OTEgMjMuODkyIDE4LjQ4ODggMjEuNDExIDIwLjAwOTkgMTkuOTAyMU0yMC4wMDk5IDE5LjkwMjFDMjEuNTI1MyAxOC4zOTg3IDIzLjk0NjUgMTcuMDY2OSAyNS45OTE1IDE2LjA4MjRDMjUuOTk2NSAxNi4wNTkzIDI2IDE2LjAzMSAyNiAxNS45OTk3QzI2IDE1Ljk2ODQgMjUuOTk2NSAxNS45NDAzIDI1Ljk5MTUgMTUuOTE3MUMyMy45NDc0IDE0LjkzMjcgMjEuNTI1OSAxMy42MDEgMjAuMDEwNSAxMi4wOTg3IiBzdHJva2U9IiM0OTFEOEIiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFzaz0idXJsKCNwYXRoLTItb3V0c2lkZS0xXzE4NV82KSIvPgo8L3N2Zz4K"
+ }
+}
\ No newline at end of file
diff --git a/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-job-worker-11.json b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-job-worker-11.json
new file mode 100644
index 00000000000..b7d505c44ad
--- /dev/null
+++ b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-job-worker-11.json
@@ -0,0 +1,1700 @@
+{
+ "$schema" : "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
+ "name" : "AI Agent Sub-process",
+ "id" : "io.camunda.connectors.agenticai.aiagent.jobworker.v1",
+ "description" : "Run a multi-step AI reasoning loop with dynamic tool selection",
+ "keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
+ "documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-subprocess/",
+ "version" : 11,
+ "category" : {
+ "id" : "connectors",
+ "name" : "Connectors"
+ },
+ "appliesTo" : [ "bpmn:SubProcess" ],
+ "elementType" : {
+ "value" : "bpmn:AdHocSubProcess"
+ },
+ "engines" : {
+ "camunda" : "^8.10"
+ },
+ "groups" : [ {
+ "id" : "provider",
+ "label" : "Model provider",
+ "openByDefault" : false
+ }, {
+ "id" : "model",
+ "label" : "Model",
+ "openByDefault" : false
+ }, {
+ "id" : "systemPrompt",
+ "label" : "System prompt",
+ "tooltip" : "A system prompt is a set of foundational instructions given to a model before any user interaction begins. It defines the AI agent’s role, behavior, tone, and communication style, ensuring that responses remain consistent and aligned with the AI agent’s intended purpose. These instructions help shape how the model interprets and responds to user input throughout the conversation.",
+ "openByDefault" : false
+ }, {
+ "id" : "userPrompt",
+ "label" : "User prompt",
+ "tooltip" : "A user prompt is the message or question you give to the AI to start or continue a conversation. It tells the AI what you need, whether it's information, help with a task, or just a chat. The AI uses your prompt to understand how to respond.",
+ "openByDefault" : false
+ }, {
+ "id" : "tools",
+ "label" : "Tools",
+ "tooltip" : "Tools are optional features the AI Agent can use to perform specific tasks. Configure this if the agent should participate in a tools feedback loop.",
+ "openByDefault" : false
+ }, {
+ "id" : "memory",
+ "label" : "Memory",
+ "tooltip" : "Configuration of the Agent's short-term/conversational memory.",
+ "openByDefault" : false
+ }, {
+ "id" : "limits",
+ "label" : "Limits",
+ "openByDefault" : false
+ }, {
+ "id" : "events",
+ "label" : "Event handling",
+ "tooltip" : "Configure how event sub-process results are handled. Results are added as user messages to the running agent.",
+ "openByDefault" : false
+ }, {
+ "id" : "response",
+ "label" : "Response",
+ "tooltip" : "Configuration of the model response format and how to map the model response to the connector result.
Depending on the selection, the model response will be available as response.responseText or response.responseJson.
See documentation for details.",
+ "openByDefault" : false
+ }, {
+ "id" : "connector",
+ "label" : "Connector"
+ }, {
+ "id" : "output",
+ "label" : "Output mapping"
+ }, {
+ "id" : "error",
+ "label" : "Error handling"
+ }, {
+ "id" : "retries",
+ "label" : "Retries"
+ } ],
+ "properties" : [ {
+ "value" : "io.camunda.agenticai:aiagent-job-worker:1",
+ "binding" : {
+ "property" : "type",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "outputCollection",
+ "binding" : {
+ "property" : "outputCollection",
+ "type" : "zeebe:adHoc"
+ },
+ "value" : "toolCallResults",
+ "type" : "Hidden"
+ }, {
+ "id" : "outputElement",
+ "binding" : {
+ "property" : "outputElement",
+ "type" : "zeebe:adHoc"
+ },
+ "value" : "={\n id: toolCall._meta.id,\n name: toolCall._meta.name,\n content: toolCallResult\n}",
+ "type" : "Hidden"
+ }, {
+ "id" : "provider.type",
+ "label" : "Provider",
+ "description" : "Specify the LLM provider to use.",
+ "value" : "anthropic",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Anthropic",
+ "value" : "anthropic"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Google GenAI",
+ "value" : "googleGenAi"
+ }, {
+ "name" : "OpenAI",
+ "value" : "openai"
+ } ]
+ }, {
+ "id" : "provider.anthropic.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional custom API endpoint",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Anthropic authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
+ }, {
+ "id" : "provider.anthropic.authentication.apiKey",
+ "label" : "Anthropic API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: eu-west-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy. Learn more at the documentation page",
+ "value" : "credentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "API Key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "provider.bedrock.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key tailored to a user, equipped with the necessary permissions",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.apiKey",
+ "label" : "API Key",
+ "description" : "Provide an API Key with permissions to interact with your AWS Bedrock Instance",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
+ }, {
+ "id" : "provider.googleGenAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.authentication.jsonKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.googleGenAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the OpenAI authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
+ }, {
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.organizationId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.apiFamily",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
+ }, {
+ "id" : "provider.openai.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional. Override the default OpenAI base URL (e.g. for an OpenAI proxy or gateway). Leave blank to use the SDK default.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.headers",
+ "label" : "Headers",
+ "description" : "Map of HTTP headers to add to the request.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.headers",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.queryParameters",
+ "label" : "Query Parameters",
+ "description" : "Map of query parameters to add to the request URL.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.queryParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "placeholder" : "claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.model",
+ "label" : "Model",
+ "description" : "Specify an inference profile ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "placeholder" : "global.anthropic.claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to allow in the generated response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.maxOutputTokens",
+ "label" : "Maximum output tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.maxOutputTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "value" : "gpt-4o",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.model.parameters.maxCompletionTokens",
+ "label" : "Maximum completion tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.maxCompletionTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.customParameters",
+ "label" : "Custom parameters",
+ "description" : "Map of additional request parameters to include.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.customParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.systemPrompt.prompt",
+ "label" : "System prompt",
+ "optional" : false,
+ "value" : "=\"You are **TaskAgent**, a helpful, generic chat agent that can handle a wide variety of customer requests using your own domain knowledge **and** any tools explicitly provided to you at runtime.\n\nIf tools are provided, you should prefer them instead of guessing an answer. You can call the same tool multiple times by providing different input values. Don't guess any tools which were not explicitly configured. If no tool matches the request, try to generate an answer. If you're not able to find a good answer, return with a message stating why you're not able to.\n\nWrap minimal, inspectable reasoning in *exactly* this XML template:\n\ncontext variable which is returned from the agent response. See documentation for details.",
+ "type" : "Text"
+ }, {
+ "id" : "data.memory.storage.type",
+ "label" : "Memory storage type",
+ "description" : "Specify how to store the conversation memory.",
+ "value" : "in-process",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "In Process (part of agent context)",
+ "value" : "in-process"
+ }, {
+ "name" : "Camunda Document Storage",
+ "value" : "camunda-document"
+ }, {
+ "name" : "AWS AgentCore Memory",
+ "value" : "aws-agentcore"
+ }, {
+ "name" : "Custom Implementation (Hybrid/Self-Managed only)",
+ "value" : "custom"
+ } ]
+ }, {
+ "id" : "data.memory.storage.timeToLive",
+ "label" : "Document TTL",
+ "description" : "How long to retain the conversation document as ISO-8601 duration (example: P14D).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.timeToLive",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "tooltip" : "Will use the cluster default TTL (time-to-live) if not specified. Make sure to set this value to a reasonable duration matching your process lifecycle.",
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.customProperties",
+ "label" : "Custom document properties",
+ "description" : "An optional map of custom properties to be stored with the conversation document.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.customProperties",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: us-east-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy for AgentCore Memory access.",
+ "value" : "credentials",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "data.memory.storage.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key with permissions for bedrock-agentcore:CreateEvent and bedrock-agentcore:ListEvents",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.memoryId",
+ "label" : "Memory ID",
+ "description" : "The ID of the pre-provisioned AgentCore Memory resource.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.memoryId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.actorId",
+ "label" : "Actor ID",
+ "description" : "Identifier of the actor associated with events (e.g., end-user or agent/user combination).",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.actorId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.storeType",
+ "label" : "Implementation type",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.storeType",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.parameters",
+ "label" : "Parameters",
+ "description" : "Parameters for the custom memory storage implementation.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.parameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.contextWindowSize",
+ "label" : "Context window size",
+ "description" : "Maximum number of recent conversation messages which are passed to the model.",
+ "optional" : false,
+ "value" : 20,
+ "feel" : "static",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.contextWindowSize",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "Use this to limit the number of messages which are sent to the model. The agent will only send the most recent messages up to the configured limit to the LLM. Older messages will be kept in the conversation store, but not sent to the model. See documentation for details.",
+ "type" : "Number"
+ }, {
+ "id" : "data.limits.maxModelCalls",
+ "label" : "Maximum model calls",
+ "description" : "Maximum number of calls to the model as a safety limit to prevent infinite loops.",
+ "optional" : false,
+ "value" : 10,
+ "feel" : "static",
+ "group" : "limits",
+ "binding" : {
+ "name" : "data.limits.maxModelCalls",
+ "type" : "zeebe:input"
+ },
+ "type" : "Number"
+ }, {
+ "id" : "data.events.behavior",
+ "label" : "Event handling behavior",
+ "description" : "Behavior on completing an event sub-process.",
+ "optional" : false,
+ "value" : "WAIT_FOR_TOOL_CALL_RESULTS",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "group" : "events",
+ "binding" : {
+ "name" : "data.events.behavior",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Wait for tool call results",
+ "value" : "WAIT_FOR_TOOL_CALL_RESULTS"
+ }, {
+ "name" : "Cancel tool calls",
+ "value" : "INTERRUPT_TOOL_CALLS"
+ } ]
+ }, {
+ "id" : "data.response.format.type",
+ "label" : "Response format",
+ "description" : "Specify the response format. Support for JSON mode varies by provider.",
+ "value" : "text",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Text",
+ "value" : "text"
+ }, {
+ "name" : "JSON",
+ "value" : "json"
+ } ]
+ }, {
+ "id" : "data.response.format.parseJson",
+ "label" : "Parse text as JSON",
+ "description" : "Tries to parse the LLM response text as JSON object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.parseJson",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "text",
+ "type" : "simple"
+ },
+ "tooltip" : "Use this option in combination with models which don't support native JSON mode/structured tool calling (e.g. Anthropic). Make sure to instruct the model to return valid JSON in the system prompt. The parsed JSON will be available as response.responseJson.
If parsing fails, null will be returned as JSON response, but the text content will still be available as response.responseText.",
+ "type" : "Boolean"
+ }, {
+ "id" : "data.response.format.schema",
+ "label" : "Response JSON schema",
+ "description" : "An optional response JSON Schema to instruct the model how to structure the JSON output.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schema",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "tooltip" : "If supported by the model, the response will be structured according to the provided schema. A parsed version of the response will be available as response.responseJson.",
+ "type" : "String"
+ }, {
+ "id" : "data.response.format.schemaName",
+ "label" : "Response JSON schema name",
+ "description" : "An optional name for the response JSON Schema to make the model aware of the expected output.",
+ "optional" : true,
+ "value" : "Response",
+ "feel" : "optional",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schemaName",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.response.includeAssistantMessage",
+ "label" : "Include assistant message",
+ "description" : "Include the full assistant message as part of the result object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.includeAssistantMessage",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "In addition to the text content, the assistant message may include multiple additional content blocks and metadata (such as token usage). The message will be available as response.responseMessage.",
+ "type" : "Boolean"
+ }, {
+ "id" : "data.response.includeAgentContext",
+ "label" : "Include agent context",
+ "description" : "Include the agent context as part of the result object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.includeAgentContext",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "Use this option if you need to re-inject the previous agent context into a future agent execution, for example when modeling a user feedback loop between an agent and a user task.",
+ "type" : "Boolean"
+ }, {
+ "id" : "version",
+ "label" : "Version",
+ "description" : "Version of the element template",
+ "value" : "11",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateVersion",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "id",
+ "label" : "ID",
+ "description" : "ID of the element template",
+ "value" : "io.camunda.connectors.agenticai.aiagent.jobworker.v1",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateId",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "resultVariable",
+ "label" : "Result variable",
+ "description" : "Name of variable to store the response in. Details in the documentation.",
+ "value" : "agent",
+ "group" : "output",
+ "binding" : {
+ "source" : "=agent",
+ "type" : "zeebe:output"
+ },
+ "type" : "String"
+ }, {
+ "id" : "errorExpression",
+ "label" : "Error expression",
+ "description" : "Expression to handle errors. Details in the documentation.",
+ "feel" : "required",
+ "group" : "error",
+ "binding" : {
+ "key" : "errorExpression",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Text"
+ }, {
+ "id" : "retryCount",
+ "label" : "Retries",
+ "description" : "Number of retries",
+ "value" : "3",
+ "feel" : "optional",
+ "group" : "retries",
+ "binding" : {
+ "property" : "retries",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "String"
+ }, {
+ "id" : "retryBackoff",
+ "label" : "Retry backoff",
+ "description" : "ISO-8601 duration to wait between retries",
+ "value" : "PT0S",
+ "group" : "retries",
+ "binding" : {
+ "key" : "retryBackoff",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "String"
+ }, {
+ "binding" : {
+ "name" : "agent",
+ "type" : "zeebe:input"
+ },
+ "type" : "Hidden"
+ } ],
+ "icon" : {
+ "contents" : "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiNBNTZFRkYiLz4KPG1hc2sgaWQ9InBhdGgtMi1vdXRzaWRlLTFfMTg1XzYiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjQiIHk9IjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iYmxhY2siPgo8cmVjdCBmaWxsPSJ3aGl0ZSIgeD0iNCIgeT0iNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIvPgo8L21hc2s+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC4wMTA1IDEyLjA5ODdDMTguNDkgMTAuNTg5NCAxNy4xNTk0IDguMTA4MTQgMTYuMTc5OSA2LjAxMTAzQzE2LjE1MiA2LjAwNDUxIDE2LjExNzYgNiAxNi4wNzk0IDZDMTYuMDQxMSA2IDE2LjAwNjYgNi4wMDQ1MSAxNS45Nzg4IDYuMDExMDRDMTQuOTk5NCA4LjEwODE0IDEzLjY2OTcgMTAuNTg4OSAxMi4xNDgxIDEyLjA5ODFDMTAuNjI2OSAxMy42MDcxIDguMTI1NjggMTQuOTI2NCA2LjAxMTU3IDE1Ljg5ODFDNi4wMDQ3NCAxNS45MjYxIDYgMTUuOTYxMSA2IDE2QzYgMTYuMDM4NyA2LjAwNDY4IDE2LjA3MzYgNi4wMTE0NCAxNi4xMDE0QzguMTI1MTkgMTcuMDcyOSAxMC42MjYyIDE4LjM5MTkgMTIuMTQ3NyAxOS45MDE2QzEzLjY2OTcgMjEuNDEwNyAxNC45OTk2IDIzLjg5MiAxNS45NzkxIDI1Ljk4OUMxNi4wMDY4IDI1Ljk5NTYgMTYuMDQxMSAyNiAxNi4wNzkzIDI2QzE2LjExNzUgMjYgMTYuMTUxOSAyNS45OTU0IDE2LjE3OTYgMjUuOTg5QzE3LjE1OTEgMjMuODkyIDE4LjQ4ODggMjEuNDExIDIwLjAwOTkgMTkuOTAyMU0yMC4wMDk5IDE5LjkwMjFDMjEuNTI1MyAxOC4zOTg3IDIzLjk0NjUgMTcuMDY2OSAyNS45OTE1IDE2LjA4MjRDMjUuOTk2NSAxNi4wNTkzIDI2IDE2LjAzMSAyNiAxNS45OTk3QzI2IDE1Ljk2ODQgMjUuOTk2NSAxNS45NDAzIDI1Ljk5MTUgMTUuOTE3MUMyMy45NDc0IDE0LjkzMjcgMjEuNTI1OSAxMy42MDEgMjAuMDEwNSAxMi4wOTg3IiBzdHJva2U9IiM0OTFEOEIiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFzaz0idXJsKCNwYXRoLTItb3V0c2lkZS0xXzE4NV82KSIvPgo8L3N2Zz4K"
+ }
+}
\ No newline at end of file
diff --git a/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-outbound-connector-10.json b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-outbound-connector-10.json
new file mode 100644
index 00000000000..6ae10b471a5
--- /dev/null
+++ b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-outbound-connector-10.json
@@ -0,0 +1,1782 @@
+{
+ "$schema" : "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
+ "name" : "AI Agent Task",
+ "id" : "io.camunda.connectors.agenticai.aiagent.v1",
+ "description" : "Execute a single AI-powered action with tool calling capabilities",
+ "keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
+ "documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-task/",
+ "version" : 10,
+ "category" : {
+ "id" : "connectors",
+ "name" : "Connectors"
+ },
+ "appliesTo" : [ "bpmn:Task" ],
+ "elementType" : {
+ "value" : "bpmn:ServiceTask"
+ },
+ "engines" : {
+ "camunda" : "^8.10"
+ },
+ "groups" : [ {
+ "id" : "provider",
+ "label" : "Model provider",
+ "openByDefault" : false
+ }, {
+ "id" : "model",
+ "label" : "Model",
+ "openByDefault" : false
+ }, {
+ "id" : "systemPrompt",
+ "label" : "System prompt",
+ "tooltip" : "A system prompt is a set of foundational instructions given to a model before any user interaction begins. It defines the AI agent’s role, behavior, tone, and communication style, ensuring that responses remain consistent and aligned with the AI agent’s intended purpose. These instructions help shape how the model interprets and responds to user input throughout the conversation.",
+ "openByDefault" : false
+ }, {
+ "id" : "userPrompt",
+ "label" : "User prompt",
+ "tooltip" : "A user prompt is the message or question you give to the AI to start or continue a conversation. It tells the AI what you need, whether it's information, help with a task, or just a chat. The AI uses your prompt to understand how to respond.",
+ "openByDefault" : false
+ }, {
+ "id" : "tools",
+ "label" : "Tools",
+ "tooltip" : "Tools are optional features the AI Agent can use to perform specific tasks. Configure this if the agent should participate in a tools feedback loop.",
+ "openByDefault" : false
+ }, {
+ "id" : "memory",
+ "label" : "Memory",
+ "tooltip" : "Configuration of the Agent's short-term/conversational memory.",
+ "openByDefault" : false
+ }, {
+ "id" : "limits",
+ "label" : "Limits",
+ "openByDefault" : false
+ }, {
+ "id" : "response",
+ "label" : "Response",
+ "tooltip" : "Configuration of the model response format and how to map the model response to the connector result.
Depending on the selection, the model response will be available as response.responseText or response.responseJson.
See documentation for details.",
+ "openByDefault" : false
+ }, {
+ "id" : "connector",
+ "label" : "Connector"
+ }, {
+ "id" : "output",
+ "label" : "Output mapping"
+ }, {
+ "id" : "error",
+ "label" : "Error handling"
+ }, {
+ "id" : "retries",
+ "label" : "Retries"
+ } ],
+ "properties" : [ {
+ "value" : "io.camunda.agenticai:aiagent:1",
+ "binding" : {
+ "property" : "type",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "provider.type",
+ "label" : "Provider",
+ "description" : "Specify the LLM provider to use.",
+ "value" : "anthropic",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Anthropic",
+ "value" : "anthropic"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Azure OpenAI",
+ "value" : "azureOpenAi"
+ }, {
+ "name" : "Google Vertex AI",
+ "value" : "google-vertex-ai"
+ }, {
+ "name" : "OpenAI",
+ "value" : "openai"
+ }, {
+ "name" : "OpenAI Compatible",
+ "value" : "openaiCompatible"
+ } ]
+ }, {
+ "id" : "provider.anthropic.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional custom API endpoint",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.apiKey",
+ "label" : "Anthropic API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: eu-west-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy. Learn more at the documentation page",
+ "value" : "credentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "API Key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "provider.bedrock.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key tailored to a user, equipped with the necessary permissions",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.apiKey",
+ "label" : "API Key",
+ "description" : "Provide an API Key with permissions to interact with your AWS Bedrock Instance",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.endpoint",
+ "label" : "Endpoint",
+ "description" : "Specify Azure OpenAI endpoint. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Azure OpenAI authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
+ }, {
+ "id" : "provider.azureOpenAi.authentication.apiKey",
+ "label" : "API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.azureOpenAi.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.azureOpenAi.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
+ }, {
+ "id" : "provider.googleVertexAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleVertexAi.authentication.jsonKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.googleVertexAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "OpenAI API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.organizationId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.apiFamily",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
+ }, {
+ "id" : "provider.openaiCompatible.endpoint",
+ "label" : "API endpoint",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Specify an endpoint to use the connector with an OpenAI compatible API. ",
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Leave blank if using HTTP headers for authentication.
If an Authorization header is specified in the headers, then the API key is ignored.",
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.headers",
+ "label" : "Headers",
+ "description" : "Map of HTTP headers to add to the request.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.headers",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.queryParameters",
+ "label" : "Query Parameters",
+ "description" : "Map of query parameters to add to the request URL.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.queryParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openaiCompatible.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "placeholder" : "claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.model",
+ "label" : "Model",
+ "description" : "Specify an inference profile ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "placeholder" : "global.anthropic.claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to allow in the generated response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.azureOpenAi.model.deploymentName",
+ "label" : "Model deployment name",
+ "description" : "Specify the model deployment name. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.deploymentName",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.azureOpenAi.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.azureOpenAi.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.azureOpenAi.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.azureOpenAi.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "azureOpenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "label" : "Maximum output tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.maxOutputTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleVertexAi.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleVertexAi.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "google-vertex-ai",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "value" : "gpt-4o",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.model.parameters.maxCompletionTokens",
+ "label" : "Maximum completion tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.maxCompletionTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "value" : "gpt-4o",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
+ "label" : "Maximum completion tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.maxCompletionTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openaiCompatible.model.parameters.customParameters",
+ "label" : "Custom parameters",
+ "description" : "Map of additional request parameters to include.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openaiCompatible.model.parameters.customParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openaiCompatible",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.systemPrompt.prompt",
+ "label" : "System prompt",
+ "optional" : false,
+ "value" : "=\"You are **TaskAgent**, a helpful, generic chat agent that can handle a wide variety of customer requests using your own domain knowledge **and** any tools explicitly provided to you at runtime.\n\nIf tools are provided, you should prefer them instead of guessing an answer. You can call the same tool multiple times by providing different input values. Don't guess any tools which were not explicitly configured. If no tool matches the request, try to generate an answer. If you're not able to find a good answer, return with a message stating why you're not able to.\n\nWrap minimal, inspectable reasoning in *exactly* this XML template:\n\ncontext variable which is returned from the agent response. See documentation for details.",
+ "type" : "Text"
+ }, {
+ "id" : "data.memory.storage.type",
+ "label" : "Memory storage type",
+ "description" : "Specify how to store the conversation memory.",
+ "value" : "in-process",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "In Process (part of agent context)",
+ "value" : "in-process"
+ }, {
+ "name" : "Camunda Document Storage",
+ "value" : "camunda-document"
+ }, {
+ "name" : "AWS AgentCore Memory",
+ "value" : "aws-agentcore"
+ }, {
+ "name" : "Custom Implementation (Hybrid/Self-Managed only)",
+ "value" : "custom"
+ } ]
+ }, {
+ "id" : "data.memory.storage.timeToLive",
+ "label" : "Document TTL",
+ "description" : "How long to retain the conversation document as ISO-8601 duration (example: P14D).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.timeToLive",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "tooltip" : "Will use the cluster default TTL (time-to-live) if not specified. Make sure to set this value to a reasonable duration matching your process lifecycle.",
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.customProperties",
+ "label" : "Custom document properties",
+ "description" : "An optional map of custom properties to be stored with the conversation document.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.customProperties",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: us-east-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy for AgentCore Memory access.",
+ "value" : "credentials",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "data.memory.storage.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key with permissions for bedrock-agentcore:CreateEvent and bedrock-agentcore:ListEvents",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.memoryId",
+ "label" : "Memory ID",
+ "description" : "The ID of the pre-provisioned AgentCore Memory resource.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.memoryId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.actorId",
+ "label" : "Actor ID",
+ "description" : "Identifier of the actor associated with events (e.g., end-user or agent/user combination).",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.actorId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.storeType",
+ "label" : "Implementation type",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.storeType",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.parameters",
+ "label" : "Parameters",
+ "description" : "Parameters for the custom memory storage implementation.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.parameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.contextWindowSize",
+ "label" : "Context window size",
+ "description" : "Maximum number of recent conversation messages which are passed to the model.",
+ "optional" : false,
+ "value" : 20,
+ "feel" : "static",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.contextWindowSize",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "Use this to limit the number of messages which are sent to the model. The agent will only send the most recent messages up to the configured limit to the LLM. Older messages will be kept in the conversation store, but not sent to the model. See documentation for details.",
+ "type" : "Number"
+ }, {
+ "id" : "data.limits.maxModelCalls",
+ "label" : "Maximum model calls",
+ "description" : "Maximum number of calls to the model as a safety limit to prevent infinite loops.",
+ "optional" : false,
+ "value" : 10,
+ "feel" : "static",
+ "group" : "limits",
+ "binding" : {
+ "name" : "data.limits.maxModelCalls",
+ "type" : "zeebe:input"
+ },
+ "type" : "Number"
+ }, {
+ "id" : "data.response.format.type",
+ "label" : "Response format",
+ "description" : "Specify the response format. Support for JSON mode varies by provider.",
+ "value" : "text",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Text",
+ "value" : "text"
+ }, {
+ "name" : "JSON",
+ "value" : "json"
+ } ]
+ }, {
+ "id" : "data.response.format.parseJson",
+ "label" : "Parse text as JSON",
+ "description" : "Tries to parse the LLM response text as JSON object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.parseJson",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "text",
+ "type" : "simple"
+ },
+ "tooltip" : "Use this option in combination with models which don't support native JSON mode/structured tool calling (e.g. Anthropic). Make sure to instruct the model to return valid JSON in the system prompt. The parsed JSON will be available as response.responseJson.
If parsing fails, null will be returned as JSON response, but the text content will still be available as response.responseText.",
+ "type" : "Boolean"
+ }, {
+ "id" : "data.response.format.schema",
+ "label" : "Response JSON schema",
+ "description" : "An optional response JSON Schema to instruct the model how to structure the JSON output.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schema",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "tooltip" : "If supported by the model, the response will be structured according to the provided schema. A parsed version of the response will be available as response.responseJson.",
+ "type" : "String"
+ }, {
+ "id" : "data.response.format.schemaName",
+ "label" : "Response JSON schema name",
+ "description" : "An optional name for the response JSON Schema to make the model aware of the expected output.",
+ "optional" : true,
+ "value" : "Response",
+ "feel" : "optional",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schemaName",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.response.includeAssistantMessage",
+ "label" : "Include assistant message",
+ "description" : "Include the full assistant message as part of the result object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.includeAssistantMessage",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "In addition to the text content, the assistant message may include multiple additional content blocks and metadata (such as token usage). The message will be available as response.responseMessage.",
+ "type" : "Boolean"
+ }, {
+ "id" : "version",
+ "label" : "Version",
+ "description" : "Version of the element template",
+ "value" : "10",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateVersion",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "id",
+ "label" : "ID",
+ "description" : "ID of the element template",
+ "value" : "io.camunda.connectors.agenticai.aiagent.v1",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateId",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "resultVariable",
+ "label" : "Result variable",
+ "description" : "Name of variable to store the response in. Details in the documentation.",
+ "value" : "agent",
+ "group" : "output",
+ "binding" : {
+ "key" : "resultVariable",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "String"
+ }, {
+ "id" : "resultExpression",
+ "label" : "Result expression",
+ "description" : "Expression to map the response into process variables. Details in the documentation.",
+ "feel" : "required",
+ "group" : "output",
+ "binding" : {
+ "key" : "resultExpression",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Text"
+ }, {
+ "id" : "errorExpression",
+ "label" : "Error expression",
+ "description" : "Expression to handle errors. Details in the documentation.",
+ "feel" : "required",
+ "group" : "error",
+ "binding" : {
+ "key" : "errorExpression",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Text"
+ }, {
+ "id" : "retryCount",
+ "label" : "Retries",
+ "description" : "Number of retries",
+ "value" : "3",
+ "feel" : "optional",
+ "group" : "retries",
+ "binding" : {
+ "property" : "retries",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "String"
+ }, {
+ "id" : "retryBackoff",
+ "label" : "Retry backoff",
+ "description" : "ISO-8601 duration to wait between retries",
+ "value" : "PT0S",
+ "group" : "retries",
+ "binding" : {
+ "key" : "retryBackoff",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "String"
+ } ],
+ "icon" : {
+ "contents" : "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiNBNTZFRkYiLz4KPG1hc2sgaWQ9InBhdGgtMi1vdXRzaWRlLTFfMTg1XzYiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjQiIHk9IjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iYmxhY2siPgo8cmVjdCBmaWxsPSJ3aGl0ZSIgeD0iNCIgeT0iNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIvPgo8L21hc2s+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC4wMTA1IDEyLjA5ODdDMTguNDkgMTAuNTg5NCAxNy4xNTk0IDguMTA4MTQgMTYuMTc5OSA2LjAxMTAzQzE2LjE1MiA2LjAwNDUxIDE2LjExNzYgNiAxNi4wNzk0IDZDMTYuMDQxMSA2IDE2LjAwNjYgNi4wMDQ1MSAxNS45Nzg4IDYuMDExMDRDMTQuOTk5NCA4LjEwODE0IDEzLjY2OTcgMTAuNTg4OSAxMi4xNDgxIDEyLjA5ODFDMTAuNjI2OSAxMy42MDcxIDguMTI1NjggMTQuOTI2NCA2LjAxMTU3IDE1Ljg5ODFDNi4wMDQ3NCAxNS45MjYxIDYgMTUuOTYxMSA2IDE2QzYgMTYuMDM4NyA2LjAwNDY4IDE2LjA3MzYgNi4wMTE0NCAxNi4xMDE0QzguMTI1MTkgMTcuMDcyOSAxMC42MjYyIDE4LjM5MTkgMTIuMTQ3NyAxOS45MDE2QzEzLjY2OTcgMjEuNDEwNyAxNC45OTk2IDIzLjg5MiAxNS45NzkxIDI1Ljk4OUMxNi4wMDY4IDI1Ljk5NTYgMTYuMDQxMSAyNiAxNi4wNzkzIDI2QzE2LjExNzUgMjYgMTYuMTUxOSAyNS45OTU0IDE2LjE3OTYgMjUuOTg5QzE3LjE1OTEgMjMuODkyIDE4LjQ4ODggMjEuNDExIDIwLjAwOTkgMTkuOTAyMU0yMC4wMDk5IDE5LjkwMjFDMjEuNTI1MyAxOC4zOTg3IDIzLjk0NjUgMTcuMDY2OSAyNS45OTE1IDE2LjA4MjRDMjUuOTk2NSAxNi4wNTkzIDI2IDE2LjAzMSAyNiAxNS45OTk3QzI2IDE1Ljk2ODQgMjUuOTk2NSAxNS45NDAzIDI1Ljk5MTUgMTUuOTE3MUMyMy45NDc0IDE0LjkzMjcgMjEuNTI1OSAxMy42MDEgMjAuMDEwNSAxMi4wOTg3IiBzdHJva2U9IiM0OTFEOEIiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFzaz0idXJsKCNwYXRoLTItb3V0c2lkZS0xXzE4NV82KSIvPgo8L3N2Zz4K"
+ }
+}
\ No newline at end of file
diff --git a/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-outbound-connector-11.json b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-outbound-connector-11.json
new file mode 100644
index 00000000000..522e0b5ff29
--- /dev/null
+++ b/connectors/agentic-ai/element-templates/versioned/agenticai-aiagent-outbound-connector-11.json
@@ -0,0 +1,1679 @@
+{
+ "$schema" : "https://unpkg.com/@camunda/zeebe-element-templates-json-schema/resources/schema.json",
+ "name" : "AI Agent Task",
+ "id" : "io.camunda.connectors.agenticai.aiagent.v1",
+ "description" : "Execute a single AI-powered action with tool calling capabilities",
+ "keywords" : [ "AI", "AI Agent", "agentic orchestration" ],
+ "documentationRef" : "https://docs.camunda.io/docs/8.10/components/connectors/out-of-the-box-connectors/agentic-ai-aiagent-task/",
+ "version" : 11,
+ "category" : {
+ "id" : "connectors",
+ "name" : "Connectors"
+ },
+ "appliesTo" : [ "bpmn:Task" ],
+ "elementType" : {
+ "value" : "bpmn:ServiceTask"
+ },
+ "engines" : {
+ "camunda" : "^8.10"
+ },
+ "groups" : [ {
+ "id" : "provider",
+ "label" : "Model provider",
+ "openByDefault" : false
+ }, {
+ "id" : "model",
+ "label" : "Model",
+ "openByDefault" : false
+ }, {
+ "id" : "systemPrompt",
+ "label" : "System prompt",
+ "tooltip" : "A system prompt is a set of foundational instructions given to a model before any user interaction begins. It defines the AI agent’s role, behavior, tone, and communication style, ensuring that responses remain consistent and aligned with the AI agent’s intended purpose. These instructions help shape how the model interprets and responds to user input throughout the conversation.",
+ "openByDefault" : false
+ }, {
+ "id" : "userPrompt",
+ "label" : "User prompt",
+ "tooltip" : "A user prompt is the message or question you give to the AI to start or continue a conversation. It tells the AI what you need, whether it's information, help with a task, or just a chat. The AI uses your prompt to understand how to respond.",
+ "openByDefault" : false
+ }, {
+ "id" : "tools",
+ "label" : "Tools",
+ "tooltip" : "Tools are optional features the AI Agent can use to perform specific tasks. Configure this if the agent should participate in a tools feedback loop.",
+ "openByDefault" : false
+ }, {
+ "id" : "memory",
+ "label" : "Memory",
+ "tooltip" : "Configuration of the Agent's short-term/conversational memory.",
+ "openByDefault" : false
+ }, {
+ "id" : "limits",
+ "label" : "Limits",
+ "openByDefault" : false
+ }, {
+ "id" : "response",
+ "label" : "Response",
+ "tooltip" : "Configuration of the model response format and how to map the model response to the connector result.
Depending on the selection, the model response will be available as response.responseText or response.responseJson.
See documentation for details.",
+ "openByDefault" : false
+ }, {
+ "id" : "connector",
+ "label" : "Connector"
+ }, {
+ "id" : "output",
+ "label" : "Output mapping"
+ }, {
+ "id" : "error",
+ "label" : "Error handling"
+ }, {
+ "id" : "retries",
+ "label" : "Retries"
+ } ],
+ "properties" : [ {
+ "value" : "io.camunda.agenticai:aiagent:1",
+ "binding" : {
+ "property" : "type",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "provider.type",
+ "label" : "Provider",
+ "description" : "Specify the LLM provider to use.",
+ "value" : "anthropic",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Anthropic",
+ "value" : "anthropic"
+ }, {
+ "name" : "AWS Bedrock",
+ "value" : "bedrock"
+ }, {
+ "name" : "Google GenAI",
+ "value" : "googleGenAi"
+ }, {
+ "name" : "OpenAI",
+ "value" : "openai"
+ } ]
+ }, {
+ "id" : "provider.anthropic.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional custom API endpoint",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Anthropic authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
+ }, {
+ "id" : "provider.anthropic.authentication.apiKey",
+ "label" : "Anthropic API key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.anthropic.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.anthropic.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: eu-west-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy. Learn more at the documentation page",
+ "value" : "credentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "API Key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "provider.bedrock.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key tailored to a user, equipped with the necessary permissions",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.authentication.apiKey",
+ "label" : "API Key",
+ "description" : "Provide an API Key with permissions to interact with your AWS Bedrock Instance",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.bedrock.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.bedrock.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.projectId",
+ "label" : "Project ID",
+ "description" : "Specify Google Cloud project ID",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.region",
+ "label" : "Region",
+ "description" : "Specify the region where AI inference should take place",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the Google Vertex AI authentication strategy.",
+ "value" : "serviceAccountCredentials",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Service account credentials",
+ "value" : "serviceAccountCredentials"
+ }, {
+ "name" : "Application default credentials (Hybrid/Self-Managed only)",
+ "value" : "applicationDefaultCredentials"
+ } ]
+ }, {
+ "id" : "provider.googleGenAi.authentication.jsonKey",
+ "label" : "JSON key of the service account",
+ "description" : "This is the key of the service account in JSON format.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.googleGenAi.authentication.jsonKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.googleGenAi.authentication.type",
+ "equals" : "serviceAccountCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the OpenAI authentication strategy.",
+ "value" : "apiKey",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "API key",
+ "value" : "apiKey"
+ }, {
+ "name" : "Client credentials",
+ "value" : "clientCredentials"
+ } ]
+ }, {
+ "id" : "provider.openai.authentication.apiKey",
+ "label" : "API key",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.apiKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.organizationId",
+ "label" : "Organization ID",
+ "description" : "For members of multiple organizations. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.organizationId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.projectId",
+ "label" : "Project ID",
+ "description" : "For accounts with multiple projects. Details in the documentation.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.projectId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "apiKey",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.clientId",
+ "label" : "Client ID",
+ "description" : "ID of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.clientId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.clientSecret",
+ "label" : "Client secret",
+ "description" : "Secret of a Microsoft Entra application",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.clientSecret",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.tenantId",
+ "label" : "Tenant ID",
+ "description" : "ID of a Microsoft Entra tenant. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.tenantId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.authentication.authorityHost",
+ "label" : "Authority host",
+ "description" : "Authority host URL for the Microsoft Entra application. Defaults to https://login.microsoftonline.com. This can also contain an OAuth 2.0 token endpoint.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.authentication.authorityHost",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "provider.openai.authentication.type",
+ "equals" : "clientCredentials",
+ "type" : "simple"
+ }, {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.timeouts.timeout",
+ "label" : "Timeout",
+ "description" : "Timeout specification for API calls to the model provider defined as ISO-8601 duration (example: PT60S).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.timeouts.timeout",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.apiFamily",
+ "label" : "API",
+ "description" : "Which OpenAI API family to use. Chat Completions is the default for backward compatibility; Responses is the newer endpoint with structured input/output items.",
+ "optional" : true,
+ "value" : "completions",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.apiFamily",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Chat Completions (default)",
+ "value" : "completions"
+ }, {
+ "name" : "Responses",
+ "value" : "responses"
+ } ]
+ }, {
+ "id" : "provider.openai.endpoint",
+ "label" : "Endpoint",
+ "description" : "Optional. Override the default OpenAI base URL (e.g. for an OpenAI proxy or gateway). Leave blank to use the SDK default.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.headers",
+ "label" : "Headers",
+ "description" : "Map of HTTP headers to add to the request.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.headers",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.queryParameters",
+ "label" : "Query Parameters",
+ "description" : "Map of query parameters to add to the request URL.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "provider",
+ "binding" : {
+ "name" : "provider.openai.queryParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "placeholder" : "claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.anthropic.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.anthropic.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.anthropic.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "anthropic",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.model",
+ "label" : "Model",
+ "description" : "Specify an inference profile ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "placeholder" : "global.anthropic.claude-sonnet-4-6",
+ "type" : "String"
+ }, {
+ "id" : "provider.bedrock.model.parameters.maxTokens",
+ "label" : "Maximum tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.maxTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to allow in the generated response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.bedrock.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.bedrock.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "bedrock",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.maxOutputTokens",
+ "label" : "Maximum output tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.maxOutputTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Maximum number of tokens that can be generated in the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Controls the degree of randomness in token selection.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 1. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.googleGenAi.model.parameters.topK",
+ "label" : "top K",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.googleGenAi.model.parameters.topK",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "googleGenAi",
+ "type" : "simple"
+ },
+ "tooltip" : "Integer greater than 0. Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.model",
+ "label" : "Model",
+ "description" : "Specify the model ID. Details in the documentation.",
+ "optional" : false,
+ "value" : "gpt-4o",
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.model",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "provider.openai.model.parameters.maxCompletionTokens",
+ "label" : "Maximum completion tokens",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.maxCompletionTokens",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "The maximum number of tokens per request to generate before stopping.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.temperature",
+ "label" : "Temperature",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.temperature",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Floating point number between 0 and 2. The higher the number, the more randomness will be injected into the response.
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.topP",
+ "label" : "top P",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.topP",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "tooltip" : "Recommended for advanced use cases only (you usually only need to use temperature).
Details in the documentation.",
+ "type" : "Number"
+ }, {
+ "id" : "provider.openai.model.parameters.customParameters",
+ "label" : "Custom parameters",
+ "description" : "Map of additional request parameters to include.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "model",
+ "binding" : {
+ "name" : "provider.openai.model.parameters.customParameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "provider.type",
+ "equals" : "openai",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.systemPrompt.prompt",
+ "label" : "System prompt",
+ "optional" : false,
+ "value" : "=\"You are **TaskAgent**, a helpful, generic chat agent that can handle a wide variety of customer requests using your own domain knowledge **and** any tools explicitly provided to you at runtime.\n\nIf tools are provided, you should prefer them instead of guessing an answer. You can call the same tool multiple times by providing different input values. Don't guess any tools which were not explicitly configured. If no tool matches the request, try to generate an answer. If you're not able to find a good answer, return with a message stating why you're not able to.\n\nWrap minimal, inspectable reasoning in *exactly* this XML template:\n\ncontext variable which is returned from the agent response. See documentation for details.",
+ "type" : "Text"
+ }, {
+ "id" : "data.memory.storage.type",
+ "label" : "Memory storage type",
+ "description" : "Specify how to store the conversation memory.",
+ "value" : "in-process",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "In Process (part of agent context)",
+ "value" : "in-process"
+ }, {
+ "name" : "Camunda Document Storage",
+ "value" : "camunda-document"
+ }, {
+ "name" : "AWS AgentCore Memory",
+ "value" : "aws-agentcore"
+ }, {
+ "name" : "Custom Implementation (Hybrid/Self-Managed only)",
+ "value" : "custom"
+ } ]
+ }, {
+ "id" : "data.memory.storage.timeToLive",
+ "label" : "Document TTL",
+ "description" : "How long to retain the conversation document as ISO-8601 duration (example: P14D).",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.timeToLive",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "tooltip" : "Will use the cluster default TTL (time-to-live) if not specified. Make sure to set this value to a reasonable duration matching your process lifecycle.",
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.customProperties",
+ "label" : "Custom document properties",
+ "description" : "An optional map of custom properties to be stored with the conversation document.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.customProperties",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "camunda-document",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.region",
+ "label" : "Region",
+ "description" : "Specify the AWS region (example: us-east-1)",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.region",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.endpoint",
+ "label" : "Endpoint",
+ "description" : "Custom API endpoint for VPC/PrivateLink configurations, AWS GovCloud, or other non-standard deployments.",
+ "optional" : true,
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.endpoint",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.type",
+ "label" : "Authentication",
+ "description" : "Specify the AWS authentication strategy for AgentCore Memory access.",
+ "value" : "credentials",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.type",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Credentials",
+ "value" : "credentials"
+ }, {
+ "name" : "Default Credentials Chain (Hybrid/Self-Managed only)",
+ "value" : "defaultCredentialsChain"
+ } ]
+ }, {
+ "id" : "data.memory.storage.authentication.accessKey",
+ "label" : "Access key",
+ "description" : "Provide an IAM access key with permissions for bedrock-agentcore:CreateEvent and bedrock-agentcore:ListEvents",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.accessKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.authentication.secretKey",
+ "label" : "Secret key",
+ "description" : "Provide the secret key for the IAM access key",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.authentication.secretKey",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "allMatch" : [ {
+ "property" : "data.memory.storage.authentication.type",
+ "equals" : "credentials",
+ "type" : "simple"
+ }, {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ } ]
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.memoryId",
+ "label" : "Memory ID",
+ "description" : "The ID of the pre-provisioned AgentCore Memory resource.",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.memoryId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.actorId",
+ "label" : "Actor ID",
+ "description" : "Identifier of the actor associated with events (e.g., end-user or agent/user combination).",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.actorId",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "aws-agentcore",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.storeType",
+ "label" : "Implementation type",
+ "optional" : false,
+ "constraints" : {
+ "notEmpty" : true
+ },
+ "feel" : "optional",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.storeType",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.storage.parameters",
+ "label" : "Parameters",
+ "description" : "Parameters for the custom memory storage implementation.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.storage.parameters",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.memory.storage.type",
+ "equals" : "custom",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.memory.contextWindowSize",
+ "label" : "Context window size",
+ "description" : "Maximum number of recent conversation messages which are passed to the model.",
+ "optional" : false,
+ "value" : 20,
+ "feel" : "static",
+ "group" : "memory",
+ "binding" : {
+ "name" : "data.memory.contextWindowSize",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "Use this to limit the number of messages which are sent to the model. The agent will only send the most recent messages up to the configured limit to the LLM. Older messages will be kept in the conversation store, but not sent to the model. See documentation for details.",
+ "type" : "Number"
+ }, {
+ "id" : "data.limits.maxModelCalls",
+ "label" : "Maximum model calls",
+ "description" : "Maximum number of calls to the model as a safety limit to prevent infinite loops.",
+ "optional" : false,
+ "value" : 10,
+ "feel" : "static",
+ "group" : "limits",
+ "binding" : {
+ "name" : "data.limits.maxModelCalls",
+ "type" : "zeebe:input"
+ },
+ "type" : "Number"
+ }, {
+ "id" : "data.response.format.type",
+ "label" : "Response format",
+ "description" : "Specify the response format. Support for JSON mode varies by provider.",
+ "value" : "text",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.type",
+ "type" : "zeebe:input"
+ },
+ "type" : "Dropdown",
+ "choices" : [ {
+ "name" : "Text",
+ "value" : "text"
+ }, {
+ "name" : "JSON",
+ "value" : "json"
+ } ]
+ }, {
+ "id" : "data.response.format.parseJson",
+ "label" : "Parse text as JSON",
+ "description" : "Tries to parse the LLM response text as JSON object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.parseJson",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "text",
+ "type" : "simple"
+ },
+ "tooltip" : "Use this option in combination with models which don't support native JSON mode/structured tool calling (e.g. Anthropic). Make sure to instruct the model to return valid JSON in the system prompt. The parsed JSON will be available as response.responseJson.
If parsing fails, null will be returned as JSON response, but the text content will still be available as response.responseText.",
+ "type" : "Boolean"
+ }, {
+ "id" : "data.response.format.schema",
+ "label" : "Response JSON schema",
+ "description" : "An optional response JSON Schema to instruct the model how to structure the JSON output.",
+ "optional" : true,
+ "feel" : "required",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schema",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "tooltip" : "If supported by the model, the response will be structured according to the provided schema. A parsed version of the response will be available as response.responseJson.",
+ "type" : "String"
+ }, {
+ "id" : "data.response.format.schemaName",
+ "label" : "Response JSON schema name",
+ "description" : "An optional name for the response JSON Schema to make the model aware of the expected output.",
+ "optional" : true,
+ "value" : "Response",
+ "feel" : "optional",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.format.schemaName",
+ "type" : "zeebe:input"
+ },
+ "condition" : {
+ "property" : "data.response.format.type",
+ "equals" : "json",
+ "type" : "simple"
+ },
+ "type" : "String"
+ }, {
+ "id" : "data.response.includeAssistantMessage",
+ "label" : "Include assistant message",
+ "description" : "Include the full assistant message as part of the result object.",
+ "optional" : true,
+ "feel" : "static",
+ "group" : "response",
+ "binding" : {
+ "name" : "data.response.includeAssistantMessage",
+ "type" : "zeebe:input"
+ },
+ "tooltip" : "In addition to the text content, the assistant message may include multiple additional content blocks and metadata (such as token usage). The message will be available as response.responseMessage.",
+ "type" : "Boolean"
+ }, {
+ "id" : "version",
+ "label" : "Version",
+ "description" : "Version of the element template",
+ "value" : "11",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateVersion",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "id",
+ "label" : "ID",
+ "description" : "ID of the element template",
+ "value" : "io.camunda.connectors.agenticai.aiagent.v1",
+ "group" : "connector",
+ "binding" : {
+ "key" : "elementTemplateId",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Hidden"
+ }, {
+ "id" : "resultVariable",
+ "label" : "Result variable",
+ "description" : "Name of variable to store the response in. Details in the documentation.",
+ "value" : "agent",
+ "group" : "output",
+ "binding" : {
+ "key" : "resultVariable",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "String"
+ }, {
+ "id" : "resultExpression",
+ "label" : "Result expression",
+ "description" : "Expression to map the response into process variables. Details in the documentation.",
+ "feel" : "required",
+ "group" : "output",
+ "binding" : {
+ "key" : "resultExpression",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Text"
+ }, {
+ "id" : "errorExpression",
+ "label" : "Error expression",
+ "description" : "Expression to handle errors. Details in the documentation.",
+ "feel" : "required",
+ "group" : "error",
+ "binding" : {
+ "key" : "errorExpression",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "Text"
+ }, {
+ "id" : "retryCount",
+ "label" : "Retries",
+ "description" : "Number of retries",
+ "value" : "3",
+ "feel" : "optional",
+ "group" : "retries",
+ "binding" : {
+ "property" : "retries",
+ "type" : "zeebe:taskDefinition"
+ },
+ "type" : "String"
+ }, {
+ "id" : "retryBackoff",
+ "label" : "Retry backoff",
+ "description" : "ISO-8601 duration to wait between retries",
+ "value" : "PT0S",
+ "group" : "retries",
+ "binding" : {
+ "key" : "retryBackoff",
+ "type" : "zeebe:taskHeader"
+ },
+ "type" : "String"
+ } ],
+ "icon" : {
+ "contents" : "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiNBNTZFRkYiLz4KPG1hc2sgaWQ9InBhdGgtMi1vdXRzaWRlLTFfMTg1XzYiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjQiIHk9IjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgZmlsbD0iYmxhY2siPgo8cmVjdCBmaWxsPSJ3aGl0ZSIgeD0iNCIgeT0iNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIvPgo8L21hc2s+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuMDEwNSAxMi4wOTg3QzE4LjQ5IDEwLjU4OTQgMTcuMTU5NCA4LjEwODE0IDE2LjE3OTkgNi4wMTEwM0MxNi4xNTIgNi4wMDQ1MSAxNi4xMTc2IDYgMTYuMDc5NCA2QzE2LjA0MTEgNiAxNi4wMDY2IDYuMDA0NTEgMTUuOTc4OCA2LjAxMTA0QzE0Ljk5OTQgOC4xMDgxNCAxMy42Njk3IDEwLjU4ODkgMTIuMTQ4MSAxMi4wOTgxQzEwLjYyNjkgMTMuNjA3MSA4LjEyNTY4IDE0LjkyNjQgNi4wMTE1NyAxNS44OTgxQzYuMDA0NzQgMTUuOTI2MSA2IDE1Ljk2MTEgNiAxNkM2IDE2LjAzODcgNi4wMDQ2OCAxNi4wNzM2IDYuMDExNDQgMTYuMTAxNEM4LjEyNTE5IDE3LjA3MjkgMTAuNjI2MiAxOC4zOTE5IDEyLjE0NzcgMTkuOTAxNkMxMy42Njk3IDIxLjQxMDcgMTQuOTk5NiAyMy44OTIgMTUuOTc5MSAyNS45ODlDMTYuMDA2OCAyNS45OTU2IDE2LjA0MTEgMjYgMTYuMDc5MyAyNkMxNi4xMTc1IDI2IDE2LjE1MTkgMjUuOTk1NCAxNi4xNzk2IDI1Ljk4OUMxNy4xNTkxIDIzLjg5MiAxOC40ODg4IDIxLjQxMSAyMC4wMDk5IDE5LjkwMjFNMjAuMDA5OSAxOS45MDIxQzIxLjUyNTMgMTguMzk4NyAyMy45NDY1IDE3LjA2NjkgMjUuOTkxNSAxNi4wODI0QzI1Ljk5NjUgMTYuMDU5MyAyNiAxNi4wMzEgMjYgMTUuOTk5N0MyNiAxNS45Njg0IDI1Ljk5NjUgMTUuOTQwMyAyNS45OTE1IDE1LjkxNzFDMjMuOTQ3NCAxNC45MzI3IDIxLjUyNTkgMTMuNjAxIDIwLjAxMDUgMTIuMDk4NyIgZmlsbD0id2hpdGUiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC4wMTA1IDEyLjA5ODdDMTguNDkgMTAuNTg5NCAxNy4xNTk0IDguMTA4MTQgMTYuMTc5OSA2LjAxMTAzQzE2LjE1MiA2LjAwNDUxIDE2LjExNzYgNiAxNi4wNzk0IDZDMTYuMDQxMSA2IDE2LjAwNjYgNi4wMDQ1MSAxNS45Nzg4IDYuMDExMDRDMTQuOTk5NCA4LjEwODE0IDEzLjY2OTcgMTAuNTg4OSAxMi4xNDgxIDEyLjA5ODFDMTAuNjI2OSAxMy42MDcxIDguMTI1NjggMTQuOTI2NCA2LjAxMTU3IDE1Ljg5ODFDNi4wMDQ3NCAxNS45MjYxIDYgMTUuOTYxMSA2IDE2QzYgMTYuMDM4NyA2LjAwNDY4IDE2LjA3MzYgNi4wMTE0NCAxNi4xMDE0QzguMTI1MTkgMTcuMDcyOSAxMC42MjYyIDE4LjM5MTkgMTIuMTQ3NyAxOS45MDE2QzEzLjY2OTcgMjEuNDEwNyAxNC45OTk2IDIzLjg5MiAxNS45NzkxIDI1Ljk4OUMxNi4wMDY4IDI1Ljk5NTYgMTYuMDQxMSAyNiAxNi4wNzkzIDI2QzE2LjExNzUgMjYgMTYuMTUxOSAyNS45OTU0IDE2LjE3OTYgMjUuOTg5QzE3LjE1OTEgMjMuODkyIDE4LjQ4ODggMjEuNDExIDIwLjAwOTkgMTkuOTAyMU0yMC4wMDk5IDE5LjkwMjFDMjEuNTI1MyAxOC4zOTg3IDIzLjk0NjUgMTcuMDY2OSAyNS45OTE1IDE2LjA4MjRDMjUuOTk2NSAxNi4wNTkzIDI2IDE2LjAzMSAyNiAxNS45OTk3QzI2IDE1Ljk2ODQgMjUuOTk2NSAxNS45NDAzIDI1Ljk5MTUgMTUuOTE3MUMyMy45NDc0IDE0LjkzMjcgMjEuNTI1OSAxMy42MDEgMjAuMDEwNSAxMi4wOTg3IiBzdHJva2U9IiM0OTFEOEIiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFzaz0idXJsKCNwYXRoLTItb3V0c2lkZS0xXzE4NV82KSIvPgo8L3N2Zz4K"
+ }
+}
\ No newline at end of file
diff --git a/connectors/agentic-ai/examples/ai-agent/ad-hoc-sub-process/ai-agent-chat-with-tools/ai-agent-chat-with-tools.bpmn b/connectors/agentic-ai/examples/ai-agent/ad-hoc-sub-process/ai-agent-chat-with-tools/ai-agent-chat-with-tools.bpmn
index 2c4e813e866..076ae564e5e 100644
--- a/connectors/agentic-ai/examples/ai-agent/ad-hoc-sub-process/ai-agent-chat-with-tools/ai-agent-chat-with-tools.bpmn
+++ b/connectors/agentic-ai/examples/ai-agent/ad-hoc-sub-process/ai-agent-chat-with-tools/ai-agent-chat-with-tools.bpmn
@@ -1,5 +1,5 @@
-
Used as the default extraction strategy by {@link
+ * io.camunda.connector.agenticai.aiagent.tool.GatewayToolHandler#extractDocuments} and as the
+ * fallback in {@link ToolCallResultDocumentExtractor} for tool call results not managed by any
+ * gateway handler. Public on purpose so that gateway handler implementations whose typed content
+ * wraps raw user-generated subtrees (e.g. arbitrary maps from a downstream system) can delegate to
+ * it for those subtrees.
+ */
+public final class ContentTreeDocumentWalker {
+
+ private ContentTreeDocumentWalker() {}
+
+ public static List For each result, the extractor walks the {@code content()} tree using {@link
+ * ContentTreeDocumentWalker} by default. When a result belongs to a {@link
+ * io.camunda.connector.agenticai.aiagent.tool.GatewayToolHandler} that overrides {@link
+ * io.camunda.connector.agenticai.aiagent.tool.GatewayToolHandler#extractDocuments(ToolCallResult)
+ * extractDocuments}, the handler's typed extraction is used instead — gateway handlers contribute
+ * extraction for the results they manage; the generic walker handles everything else.
+ */
+public class ToolCallResultDocumentExtractor {
+
+ private static final Logger LOGGER =
+ LoggerFactory.getLogger(ToolCallResultDocumentExtractor.class);
+
+ /** Documents extracted from a single tool call result, grouped with the tool call identity. */
+ public record ToolCallDocuments(
+ String toolCallId, String toolCallName, List TODO(adr-005): the {@code clear() + addMessages(all)} dance is ugly. Replace with either an
+ * {@code insertAfter(predicate, messages)} method on {@link RuntimeMemory}, or move synthetic-UM
+ * insertion ownership to {@code AgentMessagesHandler} (with a deferred slot the strategy fills),
+ * or fold {@code ChatClient}'s routing responsibility into {@code BaseAgentRequestHandler}. See
+ * the {@code ChatClient}↔{@code BARQ} TODO in ADR-005 §"Tool Call Result Routing".
+ */
+ private static void persistSyntheticContextMessages(
+ RuntimeMemory runtimeMemory, List Phase B scope (text-only): user / assistant / tool-result content is restricted to text;
+ * multimodal content blocks, reasoning round-tripping and prompt caching are deferred to Phase E.
+ * {@link ChatOptions#reasoning()} and {@link ChatOptions#cacheRetention()} are accepted but ignored
+ * in this phase. Streaming is not yet wired in either — {@link ChatStreamListener} is accepted but
+ * no events are emitted.
+ */
+public class AnthropicMessagesChatModelApi implements ChatModelApi {
+
+ private static final long DEFAULT_MAX_TOKENS = 4096L;
+
+ private final AnthropicClient client;
+ private final String model;
+ private final ObjectMapper objectMapper;
+ private final ModelCapabilities capabilities;
+ @Nullable private final Long configuredMaxTokens;
+ @Nullable private final Double temperature;
+ @Nullable private final Double topP;
+ @Nullable private final Long topK;
+
+ public AnthropicMessagesChatModelApi(
+ AnthropicClient client,
+ String model,
+ ObjectMapper objectMapper,
+ ModelCapabilities capabilities,
+ @Nullable Long configuredMaxTokens,
+ @Nullable Double temperature,
+ @Nullable Double topP,
+ @Nullable Long topK) {
+ this.client = Objects.requireNonNull(client, "client");
+ this.model = Objects.requireNonNull(model, "model");
+ this.objectMapper = Objects.requireNonNull(objectMapper, "objectMapper");
+ this.capabilities = Objects.requireNonNull(capabilities, "capabilities");
+ this.configuredMaxTokens = configuredMaxTokens;
+ this.temperature = temperature;
+ this.topP = topP;
+ this.topK = topK;
+ }
+
+ @Override
+ public ModelCapabilities capabilities() {
+ return capabilities;
+ }
+
+ @Override
+ public CompletableFuture Shape: one text block with the serialised tool-result content (so the model still sees the
+ * structured JSON the result came from, with document references in place), followed by one image
+ * / document block per inline document.
+ */
+ private List Replaces the LangChain4j bridge factory at this discriminator. Cloud backends (Bedrock /
+ * Vertex / Foundry) will land in Phase G via additional factory variants.
+ */
+public class AnthropicMessagesChatModelApiFactory
+ implements ChatModelApiFactory {@code SHORT} maps to each provider's default ephemeral retention, {@code LONG} to extended
+ * retention; {@code NONE} strips cache markers entirely. Concrete breakpoint placement is
+ * implementation-specific.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public enum CacheRetention {
+ NONE,
+ SHORT,
+ LONG
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatClient.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatClient.java
new file mode 100644
index 00000000000..69bf174a652
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatClient.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api;
+
+import io.camunda.connector.agenticai.aiagent.memory.runtime.RuntimeMemory;
+import io.camunda.connector.agenticai.aiagent.model.AgentContext;
+import io.camunda.connector.agenticai.aiagent.model.AgentExecutionContext;
+
+/**
+ * High-level facade called by {@code BaseAgentRequestHandler}. Resolves the {@link ChatModelApi}
+ * for the request, applies the tool-result strategy, assembles a {@link ChatRequest} + {@link
+ * ChatOptions} from the runtime memory and the execution / agent context, dispatches to {@link
+ * ChatModelApi#complete}, joins the resulting future, increments {@link AgentContext#metrics()}
+ * based on the assistant message, and wraps everything in a {@link ChatClientResult}.
+ *
+ * The asynchronous nature of {@link ChatModelApi#complete} is an implementation detail — callers
+ * see a synchronous facade matching the previous {@code AiFrameworkAdapter} contract. In-process
+ * observability hooks attach via {@link ChatStreamListener}; the public surface is blocking.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public interface ChatClient {
+
+ ChatClientResult chat(
+ AgentExecutionContext executionContext,
+ AgentContext agentContext,
+ RuntimeMemory runtimeMemory,
+ ChatStreamListener listener);
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatClientResult.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatClientResult.java
new file mode 100644
index 00000000000..1a45f64f83f
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatClientResult.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api;
+
+import io.camunda.connector.agenticai.aiagent.model.AgentContext;
+import io.camunda.connector.agenticai.model.message.AssistantMessage;
+
+/**
+ * Result of {@link ChatClient#chat}. Carries the agent context with model-call metrics and token
+ * usage already incremented, plus the assistant message produced by the underlying {@link
+ * ChatModelApi}. Replaces {@code AiFrameworkChatResponse} at the {@code BaseAgentRequestHandler}
+ * call site so the cutover stays a 1:1 swap.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public record ChatClientResult(AgentContext agentContext, AssistantMessage assistantMessage) {}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatModelApi.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatModelApi.java
new file mode 100644
index 00000000000..6677e42b566
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatModelApi.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api;
+
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * Per-job model client with the resolved provider configuration baked in. Created on demand by a
+ * {@link ChatModelApiFactory} and reused across capability lookups, tool-result strategy
+ * application, and the {@link #complete} call within a single request.
+ *
+ * Implementations drive the underlying SDK's streaming endpoint internally and expose a blocking
+ * {@link CompletableFuture} surface to callers. The optional {@link ChatStreamListener} receives
+ * discriminated stream events for in-process observability.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public interface ChatModelApi {
+
+ ModelCapabilities capabilities();
+
+ CompletableFuture The {@link ChatModelApiRegistry} indexes factories by {@link #providerType()} and dispatches
+ * by exact match. Two factories claiming the same discriminator fail at startup; user overrides
+ * happen via {@code @ConditionalOnMissingBean} on the built-in bean rather than silent shadowing.
+ *
+ * {@link #apiFamily()} is informational telemetry (logs, {@link
+ * io.camunda.connector.agenticai.aiagent.framework.api.event.ChatModelEvent.StartEvent}) — not used
+ * for routing. {@link #configurationType()} acts as a defensive runtime check before the registry's
+ * unchecked cast — a friendlier error than {@link ClassCastException} when a factory is
+ * accidentally registered against the wrong discriminator.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ *
+ * @param Unknown provider types fail fast — there is no factory to resolve, so requests can never
+ * start.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public interface ChatModelApiRegistry {
+
+ ChatModelApi resolve(ProviderConfiguration configuration);
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatOptions.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatOptions.java
new file mode 100644
index 00000000000..7711d1f3c19
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatOptions.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api;
+
+import java.util.Map;
+import org.springframework.lang.Nullable;
+
+/**
+ * Per-call tunables passed alongside a {@link ChatRequest}. The shape is intentionally narrow:
+ * fields here are the ones with consistent semantics across every wire-protocol family we
+ * implement. Sampling parameters that are partially supported (e.g. {@code temperature}, {@code
+ * topP}, {@code topK}, {@code seed}, {@code frequencyPenalty}) live in {@link #providerOptions}
+ * under their well-known keys; each {@link ChatModelApi} implementation reads the keys it cares
+ * about and ignores the rest.
+ *
+ * Note on {@link #maxOutputTokens} and reasoning tokens: on most providers
+ * (OpenAI Chat Completions, OpenAI Responses, Google GenAI, AWS Bedrock) reasoning / thinking
+ * tokens count toward this cap — a small value combined with reasoning enabled can leave zero room
+ * for visible output. On Anthropic Claude 4+ thinking tokens do not affect the {@code max_tokens}
+ * cap but are still billed in full. Implementations document any provider-specific clamping or
+ * adjustment they apply.
+ *
+ * Resolution of the actual value sent on the wire happens in {@code ChatClient}: explicit
+ * caller-supplied value wins, otherwise the resolved {@link ModelCapabilities#maxOutputTokens()} is
+ * used as a fallback, otherwise the implementation supplies its own per-API default.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public record ChatOptions(
+ @Nullable Integer maxOutputTokens,
+ @Nullable ReasoningConfig reasoning,
+ @Nullable CacheRetention cacheRetention,
+ Map {@code responseFormat} reuses the connector-config type {@link ResponseFormatConfiguration}
+ * directly. Implementations translate the {@code Json}/{@code Text} variants onto the provider's
+ * native shape; providers without a native structured-output mode (Anthropic Messages today) treat
+ * the JSON variant as best-effort and rely on the system prompt to constrain output.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public record ChatRequest(
+ List Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public record ChatResponse(AssistantMessage assistantMessage) {}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatStreamListener.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatStreamListener.java
new file mode 100644
index 00000000000..a6655e18a05
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ChatStreamListener.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api;
+
+import io.camunda.connector.agenticai.aiagent.framework.api.event.ChatModelEvent;
+
+/**
+ * In-process observability hook invoked for every {@link ChatModelEvent} produced while a {@link
+ * ChatModelApi} drives a provider's streaming endpoint. Listeners default to {@link #NOOP}; the
+ * listener is intentionally not exposed as a reactive type — the public chat surface remains a
+ * blocking {@code CompletableFuture Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+@FunctionalInterface
+public interface ChatStreamListener {
+
+ ChatStreamListener NOOP = event -> {};
+
+ void onEvent(ChatModelEvent event);
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ModelCapabilities.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ModelCapabilities.java
new file mode 100644
index 00000000000..b2188a2cbf3
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/ModelCapabilities.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import java.util.List;
+import org.springframework.lang.Nullable;
+
+/**
+ * Per-model capability descriptor materialised from the capability matrix YAML (or a connector
+ * config override). Drives runtime decisions like tool-result strategy selection, reasoning
+ * negotiation, and cache-marker placement. The vocabulary for {@link Modality} is fixed; modality
+ * lists per location are symmetric so every location has an explicit answer.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public record ModelCapabilities(
+ List Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public sealed interface ReasoningConfig
+ permits ReasoningConfig.ReasoningEffort,
+ ReasoningConfig.ReasoningBudget,
+ ReasoningConfig.ReasoningDisabled {
+
+ enum Effort {
+ MINIMAL,
+ LOW,
+ MEDIUM,
+ HIGH,
+ X_HIGH
+ }
+
+ record ReasoningEffort(Effort level) implements ReasoningConfig {}
+
+ record ReasoningBudget(int tokens) implements ReasoningConfig {}
+
+ record ReasoningDisabled() implements ReasoningConfig {}
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/event/ChatModelEvent.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/event/ChatModelEvent.java
new file mode 100644
index 00000000000..4a01dd08f87
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/api/event/ChatModelEvent.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.api.event;
+
+import io.camunda.connector.agenticai.aiagent.framework.api.ChatResponse;
+import io.camunda.connector.agenticai.aiagent.model.AgentMetrics;
+import org.springframework.lang.Nullable;
+
+/**
+ * Discriminated stream events emitted by a {@code ChatModelApi} implementation while driving a
+ * provider's streaming endpoint. Listeners receive every event in order; {@link DoneEvent} carries
+ * the assembled {@link ChatResponse}, while {@link ErrorEvent} carries the error message plus any
+ * partial content / usage accumulated before the failure.
+ *
+ * Part of the ADR-005 Phase 1 SPI scaffolding. Wired by ChatClientImpl, dispatched via
+ * ChatModelApiRegistry.
+ */
+public sealed interface ChatModelEvent
+ permits ChatModelEvent.StartEvent,
+ ChatModelEvent.TextStartEvent,
+ ChatModelEvent.TextDeltaEvent,
+ ChatModelEvent.TextEndEvent,
+ ChatModelEvent.ReasoningStartEvent,
+ ChatModelEvent.ReasoningDeltaEvent,
+ ChatModelEvent.ReasoningEndEvent,
+ ChatModelEvent.ToolCallStartEvent,
+ ChatModelEvent.ToolCallArgumentsDeltaEvent,
+ ChatModelEvent.ToolCallEndEvent,
+ ChatModelEvent.UsageEvent,
+ ChatModelEvent.DoneEvent,
+ ChatModelEvent.ErrorEvent {
+
+ record StartEvent(@Nullable String apiFamily, @Nullable String modelId)
+ implements ChatModelEvent {}
+
+ record TextStartEvent(int blockIndex) implements ChatModelEvent {}
+
+ record TextDeltaEvent(int blockIndex, String delta) implements ChatModelEvent {}
+
+ record TextEndEvent(int blockIndex) implements ChatModelEvent {}
+
+ record ReasoningStartEvent(int blockIndex) implements ChatModelEvent {}
+
+ record ReasoningDeltaEvent(int blockIndex, String delta, @Nullable String signatureDelta)
+ implements ChatModelEvent {}
+
+ record ReasoningEndEvent(int blockIndex) implements ChatModelEvent {}
+
+ record ToolCallStartEvent(int blockIndex, String toolCallId, String toolName)
+ implements ChatModelEvent {}
+
+ record ToolCallArgumentsDeltaEvent(int blockIndex, String argumentsDelta)
+ implements ChatModelEvent {}
+
+ record ToolCallEndEvent(int blockIndex) implements ChatModelEvent {}
+
+ record UsageEvent(AgentMetrics.TokenUsage usage) implements ChatModelEvent {}
+
+ record DoneEvent(ChatResponse response) implements ChatModelEvent {}
+
+ record ErrorEvent(
+ String errorMessage,
+ @Nullable ChatResponse partialResponse,
+ @Nullable AgentMetrics.TokenUsage partialUsage)
+ implements ChatModelEvent {}
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/capabilities/AgenticAiCapabilitiesConfiguration.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/capabilities/AgenticAiCapabilitiesConfiguration.java
new file mode 100644
index 00000000000..a1b6480295e
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/capabilities/AgenticAiCapabilitiesConfiguration.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.capabilities;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.camunda.connector.runtime.annotation.ConnectorsObjectMapper;
+import java.io.IOException;
+import java.util.List;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.env.YamlPropertySourceLoader;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.ConfigurableEnvironment;
+import org.springframework.core.env.Environment;
+import org.springframework.core.env.PropertySource;
+import org.springframework.core.io.ClassPathResource;
+
+/**
+ * Spring configuration for the model capability matrix.
+ *
+ * Bundled defaults from {@code resources/capabilities/model-capabilities.yaml} are loaded as a
+ * low-precedence {@link PropertySource} via {@link #setEnvironment(Environment)} — invoked when
+ * Spring instantiates this configuration bean and therefore robust against runtimes that skip
+ * Spring Boot's {@code EnvironmentPostProcessor} discovery (e.g. when the connector jar is loaded
+ * after the host application context has already started). Library-consumer overrides under the
+ * same {@code camunda.connector.agenticai.aiagent.framework.capabilities.*} prefix land on top.
+ */
+@Configuration
+@EnableConfigurationProperties(AgenticAiFrameworkProperties.class)
+public class AgenticAiCapabilitiesConfiguration implements EnvironmentAware {
+
+ private static final String BUNDLED_RESOURCE = "capabilities/model-capabilities.yaml";
+ private static final String PROPERTY_SOURCE_NAME = "agentic-ai-bundled-capability-matrix";
+
+ @Override
+ public void setEnvironment(Environment environment) {
+ if (!(environment instanceof ConfigurableEnvironment configurable)) {
+ return;
+ }
+ if (configurable.getPropertySources().contains(PROPERTY_SOURCE_NAME)) {
+ return;
+ }
+ final var resource = new ClassPathResource(BUNDLED_RESOURCE);
+ if (!resource.exists()) {
+ return;
+ }
+ try {
+ final List Capability sub-trees ({@code defaults} and per-entry {@code capabilities}) are bound to the
+ * sparse {@link ModelCapabilitiesYaml} record so Spring Boot's relaxed binding can rebuild modality
+ * lists from indexed property keys; the resolver projects them onto a flat {@link
+ * io.camunda.connector.agenticai.aiagent.framework.api.ModelCapabilities} via Jackson tree merge at
+ * lookup time.
+ */
+@ConfigurationProperties("camunda.connector.agenticai.aiagent.framework")
+public record AgenticAiFrameworkProperties(Map Capability sub-trees are kept as raw {@link JsonNode}s so the resolver can deep-merge
+ * (Spring-Boot semantics: maps deep-merge, lists replace, scalars override) at lookup time.
+ */
+public record CapabilityMatrix(Map Each {@code models} map entry must carry exactly one discriminator:
+ *
+ * {@code *} and {@code .} cannot appear in the map key because Spring Boot's map binding strips
+ * them; pattern entries must declare the glob in the {@code pattern} field while the map key stays
+ * a stable, override-friendly identifier.
+ */
+public final class CapabilityMatrixFactory {
+
+ private CapabilityMatrixFactory() {}
+
+ public static CapabilityMatrix build(
+ AgenticAiFrameworkProperties properties, ObjectMapper objectMapper) {
+ final Map Each field is nullable: a missing field means "inherit from the lower layer" (api-family
+ * {@code defaults} → conservative defaults). The fully-merged result is projected onto the flat
+ * {@link ModelCapabilities} SPI shape via {@link #toModelCapabilities()}.
+ */
+@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+@JsonInclude(JsonInclude.Include.ALWAYS) // keep null fields visible to deep-merge
+public record ModelCapabilitiesYaml(
+ @Nullable InputModalities inputModalities,
+ @Nullable OutputModalities outputModalities,
+ @Nullable Boolean supportsReasoning,
+ @Nullable Boolean supportsReasoningSignatureRoundtrip,
+ @Nullable Boolean supportsPromptCaching,
+ @Nullable Boolean supportsParallelToolCalls,
+ @Nullable Integer contextWindow,
+ @Nullable Integer maxOutputTokens) {
+
+ @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
+ @JsonInclude(JsonInclude.Include.ALWAYS)
+ public record InputModalities(
+ @Nullable List Mirrors the LangChain4j bridge's {@code ContentConverterImpl}: a {@link TextContent} returns
+ * its text verbatim; an {@link ObjectContent} returns its inner value as-is when it's already a
+ * {@code String}, otherwise as Jackson-serialised JSON. Other content types must be handled by the
+ * caller before reaching this helper.
+ *
+ * Callers are expected to pass the {@code @ConnectorsObjectMapper} so nested {@link
+ * io.camunda.connector.api.document.Document}s serialise to their reference shape rather than
+ * throwing.
+ */
+public final class ContentTextSerializer {
+
+ private ContentTextSerializer() {}
+
+ public static String toText(Content content, ObjectMapper objectMapper) {
+ if (content instanceof TextContent text) {
+ return text.text();
+ }
+ if (content instanceof ObjectContent object) {
+ return objectContentToText(object, objectMapper);
+ }
+ throw new IllegalArgumentException(
+ "Unsupported content block for text serialization: " + content.getClass().getSimpleName());
+ }
+
+ public static String objectContentToText(ObjectContent content, ObjectMapper objectMapper) {
+ final var value = content.content();
+ if (value instanceof String s) {
+ return s;
+ }
+ try {
+ return objectMapper.writeValueAsString(value);
+ } catch (JsonProcessingException e) {
+ throw new IllegalStateException("Failed to serialize ObjectContent value to JSON", e);
+ }
+ }
+}
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/langchain4j/ChatMessageConverterImpl.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/langchain4j/ChatMessageConverterImpl.java
index 246b9e67ebd..7f57aafc6fd 100644
--- a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/langchain4j/ChatMessageConverterImpl.java
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/langchain4j/ChatMessageConverterImpl.java
@@ -9,48 +9,42 @@
import static io.camunda.connector.agenticai.util.JacksonExceptionMessageExtractor.humanReadableJsonProcessingExceptionMessage;
import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.ToolExecutionResultMessage;
-import dev.langchain4j.internal.Json;
+import dev.langchain4j.model.anthropic.AnthropicTokenUsage;
+import dev.langchain4j.model.bedrock.BedrockTokenUsage;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.ChatResponseMetadata;
+import dev.langchain4j.model.openai.OpenAiTokenUsage;
+import dev.langchain4j.model.output.FinishReason;
import dev.langchain4j.model.output.TokenUsage;
import io.camunda.connector.agenticai.aiagent.framework.langchain4j.tool.ToolCallConverter;
+import io.camunda.connector.agenticai.aiagent.model.AgentMetrics;
import io.camunda.connector.agenticai.model.message.AssistantMessage;
import io.camunda.connector.agenticai.model.message.AssistantMessageBuilder;
+import io.camunda.connector.agenticai.model.message.StopReason;
import io.camunda.connector.agenticai.model.message.SystemMessage;
import io.camunda.connector.agenticai.model.message.ToolCallResultMessage;
import io.camunda.connector.agenticai.model.message.UserMessage;
import io.camunda.connector.agenticai.model.message.content.Content;
import io.camunda.connector.agenticai.model.message.content.TextContent;
-import io.camunda.connector.agenticai.util.ObjectMapperConstants;
import io.camunda.connector.api.error.ConnectorException;
import java.time.ZonedDateTime;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
public class ChatMessageConverterImpl implements ChatMessageConverter {
- private static final Logger LOGGER = LoggerFactory.getLogger(ChatMessageConverterImpl.class);
-
private final ContentConverter contentConverter;
private final ToolCallConverter toolCallConverter;
- private final ObjectMapper objectMapper;
public ChatMessageConverterImpl(
- ContentConverter contentConverter,
- ToolCallConverter toolCallConverter,
- ObjectMapper objectMapper) {
+ ContentConverter contentConverter, ToolCallConverter toolCallConverter) {
this.contentConverter = contentConverter;
this.toolCallConverter = toolCallConverter;
- this.objectMapper = objectMapper;
}
@Override
@@ -132,11 +126,22 @@ public AssistantMessage toAssistantMessage(ChatResponse chatResponse) {
protected AssistantMessageBuilder toAssistantMessageBuilder(ChatResponse chatResponse) {
final var builder = AssistantMessage.builder();
- if (chatResponse.metadata() != null) {
- builder.metadata(
- Map.of(
- "timestamp", ZonedDateTime.now(),
- "framework", serializedChatResponseMetadata(chatResponse.metadata())));
+ final ChatResponseMetadata metadata = chatResponse.metadata();
+ if (metadata != null) {
+ builder.metadata(Map.of("timestamp", ZonedDateTime.now()));
+
+ Optional.ofNullable(metadata.modelName())
+ .filter(StringUtils::isNotBlank)
+ .ifPresent(builder::modelId);
+ Optional.ofNullable(metadata.id())
+ .filter(StringUtils::isNotBlank)
+ .ifPresent(builder::messageId);
+ Optional.ofNullable(metadata.finishReason())
+ .map(this::toStopReason)
+ .ifPresent(builder::stopReason);
+ Optional.ofNullable(metadata.tokenUsage())
+ .map(this::toDomainTokenUsage)
+ .ifPresent(builder::usage);
}
final var aiMessage = chatResponse.aiMessage();
@@ -152,41 +157,47 @@ protected AssistantMessageBuilder toAssistantMessageBuilder(ChatResponse chatRes
return builder;
}
- protected Map Public so customers can compose it from their own {@link
+ * io.camunda.connector.agenticai.aiagent.framework.api.ChatModelApiFactory ChatModelApiFactory}
+ * bean — e.g. to wire up a LangChain4j-supported provider we don't ship by passing in their own
+ * resolved {@link ChatModel} alongside the framework's converter beans.
+ */
+public class Langchain4JChatModelApi implements ChatModelApi {
+
+ private final ChatModel chatModel;
+ private final ChatMessageConverter chatMessageConverter;
+ private final ToolSpecificationConverter toolSpecificationConverter;
+ private final JsonSchemaConverter jsonSchemaConverter;
+
+ public Langchain4JChatModelApi(
+ ChatModel chatModel,
+ ChatMessageConverter chatMessageConverter,
+ ToolSpecificationConverter toolSpecificationConverter,
+ JsonSchemaConverter jsonSchemaConverter) {
+ this.chatModel = chatModel;
+ this.chatMessageConverter = chatMessageConverter;
+ this.toolSpecificationConverter = toolSpecificationConverter;
+ this.jsonSchemaConverter = jsonSchemaConverter;
+ }
+
+ @Override
+ public ModelCapabilities capabilities() {
+ // Conservative defaults — the bridge is model-agnostic. Native implementations will resolve
+ // capabilities from the matrix.
+ return new ModelCapabilities(
+ List.of(Modality.TEXT),
+ List.of(Modality.TEXT),
+ List.of(Modality.TEXT),
+ false,
+ false,
+ false,
+ true,
+ null,
+ null);
+ }
+
+ @Override
+ public CompletableFuture Public so customers can compose it from their own {@link ChatModelApiFactory} bean — e.g. to
+ * wire a LangChain4j-supported provider we don't ship by passing in their own {@link
+ * ChatModelProvider} alongside the framework's converter beans.
+ */
+public class Langchain4JChatModelApiFactory or
- *
- * Note: To make the behavior consistent, this serializer first converts the document to a {@link
- * Content} block, so the supported formats are limited to the same set as the documents which can
- * be provided as the user prompt.
- */
-public class DocumentToContentSerializer extends JsonSerializer This bean is registered as the single {@code ChatModelProvider If the result is not a string, it will be serialized to a JSON string, using the {@link
- * ContentConverter} to serialize document contents.
+ * If the result is not a string, it will be serialized to a JSON string using the connectors
+ * ObjectMapper. Document instances in the content tree are serialized as document references.
*/
@Override
public ToolExecutionResultMessage asToolExecutionResultMessage(ToolCallResult toolCallResult) {
@@ -96,7 +93,13 @@ public ToolExecutionResultMessage asToolExecutionResultMessage(ToolCallResult to
private String contentAsString(String toolName, Object result) {
try {
- return contentConverter.convertToString(result);
+ if (result == null) {
+ return null;
+ }
+ if (result instanceof String s) {
+ return s;
+ }
+ return objectMapper.writeValueAsString(result);
} catch (JsonProcessingException e) {
throw new ConnectorException(
"Failed to convert result of tool call '%s' to string: %s"
diff --git a/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/multimodal/DocumentModality.java b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/multimodal/DocumentModality.java
new file mode 100644
index 00000000000..d82fbd1ff9c
--- /dev/null
+++ b/connectors/agentic-ai/src/main/java/io/camunda/connector/agenticai/aiagent/framework/multimodal/DocumentModality.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright Camunda Services GmbH and/or licensed to Camunda Services GmbH
+ * under one or more contributor license agreements. Licensed under a proprietary license.
+ * See the License.txt file for more information. You may not use this file
+ * except in compliance with the proprietary license.
+ */
+package io.camunda.connector.agenticai.aiagent.framework.multimodal;
+
+import static io.camunda.connector.agenticai.aiagent.agent.AgentErrorCodes.ERROR_CODE_FAILED_MODEL_CALL;
+
+import io.camunda.connector.agenticai.aiagent.framework.api.ModelCapabilities.Modality;
+import io.camunda.connector.api.document.Document;
+import io.camunda.connector.api.document.DocumentMetadata;
+import io.camunda.connector.api.error.ConnectorException;
+import java.util.Locale;
+import java.util.Optional;
+import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * Maps a Camunda {@link Document}'s declared MIME type to a {@link Modality}.
+ *
+ * Modality vocabulary matches the capability matrix; the routing strategy uses this to decide
+ * whether a document fits the resolved model's modality slot, and the per-impl emitters use it to
+ * dispatch construction of provider-native content blocks.
+ *
+ * Coverage parity with the LangChain4j path ({@code DocumentToContentConverterImpl}): {@code
+ * text/*}, {@code application/json}, {@code application/xml}, {@code application/yaml} → {@link
+ * Modality#TEXT}; the four common image MIME types → {@link Modality#IMAGE}; {@code
+ * application/pdf} → {@link Modality#DOCUMENT}. Audio + video MIME types map for completeness but
+ * no emitter consumes them yet (Phase G+).
+ */
+public final class DocumentModality {
+
+ private static final Set Phase C scope (text-only): user / assistant / tool-result content is restricted to text;
+ * multimodal content blocks, reasoning round-tripping (encrypted reasoning items don't apply to
+ * Chat Completions), and prompt caching are deferred to Phase E. {@link
+ * ChatOptions#cacheRetention()} is accepted but ignored. Streaming is not yet wired in either —
+ * {@link ChatStreamListener} is accepted but no events are emitted.
+ *
+ * Used by both the {@code openai} and {@code openaiCompatible} discriminators (the OkHttp {@link
+ * OpenAIClient} differs only in baseUrl / auth construction, which the factory handles).
+ */
+public class OpenAiChatCompletionsChatModelApi implements ChatModelApi {
+
+ private static final TypeReference
+ *
+ *
+ * Map keys under {@code models} carry the discriminator: keys containing {@code *} are treated as
+ * glob patterns, otherwise as model ids. Optional explicit {@code id} / {@code pattern} fields
+ * inside an entry override the key derivation when needed.
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * Pattern and default fall-throughs emit one INFO log per (api family, model id) so operators
+ * notice when they're running on best-effort capabilities. Exact / alias matches are silent —
+ * they're verified declarations.
+ */
+public class ModelCapabilitiesResolver {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ModelCapabilitiesResolver.class);
+
+ static final ModelCapabilities CONSERVATIVE_DEFAULTS =
+ new ModelCapabilities(
+ List.of(Modality.TEXT),
+ List.of(Modality.TEXT),
+ List.of(Modality.TEXT),
+ false,
+ false,
+ false,
+ false,
+ null,
+ null);
+
+ private static final ModelCapabilitiesYaml CONSERVATIVE_DEFAULTS_YAML =
+ new ModelCapabilitiesYaml(
+ new ModelCapabilitiesYaml.InputModalities(List.of(Modality.TEXT), List.of(Modality.TEXT)),
+ new ModelCapabilitiesYaml.OutputModalities(List.of(Modality.TEXT)),
+ false,
+ false,
+ false,
+ false,
+ null,
+ null);
+
+ private final CapabilityMatrix matrix;
+ private final ObjectMapper mapper;
+ private final JsonNode conservativeBase;
+ private final Set
- * {
- * "type": "text",
- * "media_type": "text/plain",
- * "data": "..."
- * }
- *
- *
- *
- * {
- * "type": "base64",
- * "media_type": "application/pdf",
- * "data": "...base64..."
- * }
- *
- *
- *
+ *
+ *
+ *