This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new bd52c5736a Add test coverage for OpenAI embeddings
bd52c5736a is described below
commit bd52c5736ad2dc7a1bddbda5ba70bffbaa80da46
Author: James Netherton <[email protected]>
AuthorDate: Mon Feb 23 20:30:24 2026 +0000
Add test coverage for OpenAI embeddings
---
integration-tests/openai/README.adoc | 1 +
integration-tests/openai/pom.xml | 4 +
.../component/openai/it/OpenaiResource.java | 37 +++++++++
.../quarkus/component/openai/it/OpenaiRoutes.java | 9 ++
.../quarkus/component/openai/it/OpenaiTest.java | 95 ++++++++++++++++++++++
.../component/openai/it/OpenaiTestResource.java | 3 +
...dings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json | 25 ++++++
...dings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json | 46 +++++++++++
...dings-241446f1-554b-4cbf-8e0e-860f799c18fa.json | 48 +++++++++++
...dings-74b74a7f-a14b-43ef-bbcd-6e492e07464b.json | 46 +++++++++++
...dings-7d5105a3-8c4f-4e6c-977b-bc9d4157650c.json | 46 +++++++++++
...dings-bb9ce2dd-d285-491c-890a-f57a751b8155.json | 46 +++++++++++
...dings-cdf3ca4a-680c-4d9b-a649-6af0e4b746ec.json | 46 +++++++++++
...dings-e04198c2-a03b-4c4b-96ac-dc2b6260c203.json | 49 +++++++++++
...dings-ebc01e5b-f3fa-4fce-bd96-e6a7e2e49dee.json | 49 +++++++++++
15 files changed, 550 insertions(+)
diff --git a/integration-tests/openai/README.adoc
b/integration-tests/openai/README.adoc
index 97bc3d5edf..e768f03544 100644
--- a/integration-tests/openai/README.adoc
+++ b/integration-tests/openai/README.adoc
@@ -25,6 +25,7 @@ Alternatively, you can test against any OpenAI compatible API
by configuring the
export OPENAI_API_KEY=fake-key
export OPENAI_BASE_URL=https://you-api-endpoint/v1
export OPENAI_MODEL=your-model-name
+export OPENAI_EMBEDDING_MODEL=your-embedding-model-name
----
If the WireMock stub recordings need updating, then remove the existing files
from `src/test/resources/mappings` and run tests with either:
diff --git a/integration-tests/openai/pom.xml b/integration-tests/openai/pom.xml
index f45b9724ce..f43e3464a6 100644
--- a/integration-tests/openai/pom.xml
+++ b/integration-tests/openai/pom.xml
@@ -51,6 +51,10 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.quarkus</groupId>
+ <artifactId>quarkus-resteasy-jackson</artifactId>
+ </dependency>
<!-- test dependencies -->
<dependency>
diff --git
a/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiResource.java
b/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiResource.java
index 4b69253890..aaf74c6259 100644
---
a/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiResource.java
+++
b/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiResource.java
@@ -17,7 +17,9 @@
package org.apache.camel.quarkus.component.openai.it;
import java.io.File;
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import jakarta.enterprise.context.ApplicationScoped;
@@ -32,6 +34,9 @@ import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.MediaType;
import org.apache.camel.CamelContext;
import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.openai.OpenAIConstants;
import org.apache.camel.util.ObjectHelper;
@@ -105,6 +110,38 @@ public class OpenaiResource {
return consumerTemplate.receiveBody(endpointUri, 10000, String.class);
}
+ @Path("/embeddings")
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
+ @Produces(MediaType.APPLICATION_JSON)
+ public List<?> embeddings(String embeddingContent) {
+ Object body = embeddingContent;
+ String endpointUriSuffix = "embed";
+ String[] content = embeddingContent.split(",");
+ if (content.length > 1) {
+ endpointUriSuffix = "batchEmbed";
+ body = Arrays.asList(content);
+ }
+
+ return producerTemplate.requestBody("direct:" + endpointUriSuffix,
body, List.class);
+ }
+
+ @Path("/vector/similarity")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Double vectorSimilarity(@QueryParam("embeddingContent") String
embeddingContent, List<Float> vector) {
+ Exchange exchange =
producerTemplate.request("direct:vectorSimilarity", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ Message message = exchange.getMessage();
+ message.setHeader(OpenAIConstants.REFERENCE_EMBEDDING, vector);
+ message.setBody(embeddingContent);
+ }
+ });
+ return
exchange.getMessage().getHeader(OpenAIConstants.SIMILARITY_SCORE, Double.class);
+ }
+
@Path("/routes/{routeId}/{operation}")
@POST
public void routeOperations(
diff --git
a/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiRoutes.java
b/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiRoutes.java
index 46a0aae44c..48fcb2ffe2 100644
---
a/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiRoutes.java
+++
b/integration-tests/openai/src/main/java/org/apache/camel/quarkus/component/openai/it/OpenaiRoutes.java
@@ -81,5 +81,14 @@ public class OpenaiRoutes extends RouteBuilder {
.setBody(constant("What is my Camel species?"))
.to("openai:chat-completion?conversationMemory=true")
.log("Chat response 2: ${body}");
+
+ from("direct:embed")
+ .to("openai:embeddings");
+
+ from("direct:batchEmbed")
+ .to("openai:embeddings");
+
+ from("direct:vectorSimilarity")
+ .to("openai:embeddings");
}
}
diff --git
a/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTest.java
b/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTest.java
index a70d1254d5..69f0aa4113 100644
---
a/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTest.java
+++
b/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTest.java
@@ -25,6 +25,7 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Duration;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@@ -39,10 +40,13 @@ import org.awaitility.Awaitility;
import org.junit.jupiter.api.Test;
import static org.hamcrest.Matchers.containsStringIgnoringCase;
+import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
@QuarkusTestResource(OpenaiTestResource.class)
@QuarkusTest
@@ -208,4 +212,95 @@ class OpenaiTest {
"name", is("Bluetooth Headphones"),
"price", greaterThan(0.0F));
}
+
+ @Test
+ void simpleEmbedding() {
+ String simpleText = "Simple text";
+ List<?> result = RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body(simpleText)
+ .post("/openai/embeddings")
+ .then()
+ .statusCode(200)
+ .body(".", hasSize(greaterThan(0)))
+ .extract()
+ .body()
+ .as(List.class);
+
+ Double similarity = RestAssured.given()
+ .contentType(ContentType.JSON)
+ .queryParam("embeddingContent", simpleText)
+ .body(result)
+ .post("/openai/vector/similarity")
+ .then()
+ .statusCode(200)
+ .extract()
+ .body()
+ .as(Double.class);
+
+ assertTrue(similarity >= 0.9);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ void batchEmbedding() {
+ String batchText = "Text content 1,Text content 2,Text content 3";
+ List<List<?>> result = RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body(batchText)
+ .post("/openai/embeddings")
+ .then()
+ .statusCode(200)
+ .body(
+ ".", hasSize(equalTo(3)),
+ "[0]", hasSize(greaterThan(0)),
+ "[1]", hasSize(greaterThan(0)),
+ "[2]", hasSize(greaterThan(0)))
+ .extract()
+ .body()
+ .as(List.class);
+
+ String[] batchTextParts = batchText.split(",");
+ for (int i = 0; i < batchTextParts.length; i++) {
+ Double similarity = RestAssured.given()
+ .contentType(ContentType.JSON)
+ .queryParam("embeddingContent", batchTextParts[i])
+ .body(result.get(i))
+ .post("/openai/vector/similarity")
+ .then()
+ .statusCode(200)
+ .extract()
+ .body()
+ .as(Double.class);
+ assertTrue(similarity >= 0.9);
+ }
+ }
+
+ @Test
+ void vectorSimilarity() {
+ String simpleText = "Simple text";
+ List<?> result = RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body(simpleText)
+ .post("/openai/embeddings")
+ .then()
+ .statusCode(200)
+ .body(".", hasSize(greaterThan(0)))
+ .extract()
+ .body()
+ .as(List.class);
+
+ Double similarity = RestAssured.given()
+ .contentType(ContentType.JSON)
+ .queryParam("embeddingContent", simpleText + " extra content")
+ .body(result)
+ .post("/openai/vector/similarity")
+ .then()
+ .statusCode(200)
+ .extract()
+ .body()
+ .as(Double.class);
+
+ assertTrue(similarity >= 0.6);
+ }
}
diff --git
a/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTestResource.java
b/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTestResource.java
index 550e3fb992..70077b0adb 100644
---
a/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTestResource.java
+++
b/integration-tests/openai/src/test/java/org/apache/camel/quarkus/component/openai/it/OpenaiTestResource.java
@@ -38,6 +38,7 @@ public class OpenaiTestResource extends
WireMockTestResourceLifecycleManager {
private static final String OPENAI_ENV_API_KEY = "OPENAI_API_KEY";
private static final String OPENAI_ENV_BASE_URL = "OPENAI_BASE_URL";
private static final String OPENAI_ENV_MODEL = "OPENAI_MODEL";
+ private static final String OPENAI_ENV_EMBEDDING_MODEL =
"OPENAI_EMBEDDING_MODEL";
@Override
public Map<String, String> start() {
@@ -50,6 +51,8 @@ public class OpenaiTestResource extends
WireMockTestResourceLifecycleManager {
}
configuration.put("camel.component.openai.model",
envOrDefault(OPENAI_ENV_MODEL, "gpt-5"));
+ configuration.put("camel.component.openai.embedding-model",
+ envOrDefault(OPENAI_ENV_EMBEDDING_MODEL,
"text-embedding-3-small"));
configuration.put("camel.component.openai.apiKey",
envOrDefault(OPENAI_ENV_API_KEY, "test-key"));
return configuration;
}
diff --git
a/integration-tests/openai/src/test/resources/__files/embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json
b/integration-tests/openai/src/test/resources/__files/embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json
new file mode 100644
index 0000000000..d03769d2d5
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/__files/embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json
@@ -0,0 +1,25 @@
+{
+ "object": "list",
+ "data": [
+ {
+ "object": "embedding",
+ "index": 0,
+ "embedding":
"JqBquh2/YTyVANQ8gMVFvEgGFL00dR+9CHUWPOf9fLw7Zxg8FlkIPBiNDj1EAXg88mhyvdhgtDxOJ3c9gz5CO1/LjjxorJc6BpXDvE4YOj2L2lQ7mGoTvKUJD7yBpZg6y8E4PKbCZTvn7j+8HAaLPBLgCz3Fr5K9bSPhuntdOb1elVU8gaUYvQticzwMp2k9Kk8gvC+3LLzEeVm6SvUjvUwpKjx0Bh28y9B1PJzyTDuj1Yi7K6PTPOFQ+rwcFcg81SyuuwO3Iz1Gi+S8FxLfuqTEmLzmqUk9pI5fvRp8HrwN3SK9xa+SPZ3Sn7xUKuC7hnJIPXnTzDykKTw8jWRBPCujU7x6GMM7uf8mvBMlgrwcay48LoHzOzappTz6KwG8P+9RvWqqZDyfXIy8Cv+Cu3w9jLw723g8nCiGvCyDJjvLXBU954kcvL0TgLwngD29ODOSvJ03wzxAeb69t8ugPIlB
[...]
+ },
+ {
+ "object": "embedding",
+ "index": 1,
+ "embedding":
"w3MEvLo2njzTpkE8vbFJvVlNF73Pvju7bJ5qPMLQGbxNN7Y8ytX7O8NzBD1v5D868g4wvWFTMz1Ku1A9nKZwOy4F2DzUSay8fxd9vJDuXj2bOtC8ANZMPB4vsLshFnw8UH2LPDSQyLuMPGm8Gx9rPJ3dOj2aYo+9bdU0vNgxMr3ho2489ixGvQu14ztHdjU9vNmIPKzbobtG1IQ8UekrvV8OmDzgynO82gotPFomkjv5p3E8ZJhOPMD25LxQfNE8RtQEPGvGKT32LMa7zEOQuyY1zLxdoT098DT7vJ4UhbtULke9luVvPQt/07w3DC69cIbwPJbl7zznLl88ksgTPQJ5t7xwG4o8qzg3vKH7UDsgdEu8EXZkvHWlQDzw/6Q7QBJKvaQLljxBtTQ8i5l+vO26ibzK1Xu7iYstPNlnwjvtJfA8O76ju8pqFb0peyG98aIPvT5v3zyRW7m9eLWFPK7p
[...]
+ },
+ {
+ "object": "embedding",
+ "index": 2,
+ "embedding":
"l6l7vD+CozxHBN48Q8NAvVoC2Lyzkfa8hpCKPMtPebzWtrw86Z2RvCCH1TwFhow8U4AdvXa8CD3ott88w2X4O4ilBj0VCe28E/RwvLN6UT0fWQu8PVYCPRTborp9WwG86UxwPF+ruzxNKoS79GYCPK66SD1pKaS9Xf6FvLUOOb1nlby5tfcTvWnBXbsvxUY9hHuOOmkppDvdiZi7Qi0wvXfRhDznN3S80wswPMRMKrzajeo8eivwPDFCibwLWxE95JKAOg4dQz3xNnG8ghXxO2FWSLy8eU49PO47vRAyP7xKlhy9UOw1Pfkg8rvACw29yosePYXA/TuL5iM8JsQgPXIqyrwSrwE9UITvO+6L5DuYkC28YKmSvDFZrjs78GQ8AfRNvbiiILvVn5e8veEUu2q/tLzi4Vq8prmivNY1qDkcRjg9TFr3u14VK72AAPW8jnoLvX6miTwTRZK90vSKPPf0
[...]
+ }
+ ],
+ "model": "text-embedding-3-small",
+ "usage": {
+ "prompt_tokens": 12,
+ "total_tokens": 12
+ }
+}
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json
new file mode 100644
index 0000000000..9157762066
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json
@@ -0,0 +1,46 @@
+{
+ "id" : "0c403d8e-3be7-4d3b-96ea-88a87cf6feb0",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":[\"Text content 1\",\"Text content
2\",\"Text content
3\"],\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "bodyFileName" : "embeddings-0c403d8e-3be7-4d3b-96ea-88a87cf6feb0.json",
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-canary-674bd7dc9d-pblzt",
+ "set-cookie" :
"__cf_bm=wTJNeihZ_2wGpdHdywwTETM.s.6ICs3Ch2ocqkz6hJM-1771859792.8486474-1.0.1.1-gqPYyz4YUZxCVF5WSF1dWZEsyBIPRZgc02i.dBJSYGTeFn5g5UrlfVOGLIkBFoMvx9S4QWnQKILr_zfr6E1WdRea6e88Z_pi3bMie_q.9nqsyY6te5Z9B0kW7CVAj3HH;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:32 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_5650bbd7d08d4e34a67621bace84b87e",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af594976cce2-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999990",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:32 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "71",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "0c403d8e-3be7-4d3b-96ea-88a87cf6feb0",
+ "persistent" : true,
+ "insertionIndex" : 12
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-241446f1-554b-4cbf-8e0e-860f799c18fa.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-241446f1-554b-4cbf-8e0e-860f799c18fa.json
new file mode 100644
index 0000000000..cf6373b942
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-241446f1-554b-4cbf-8e0e-860f799c18fa.json
@@ -0,0 +1,48 @@
+{
+ "id" : "241446f1-554b-4cbf-8e0e-860f799c18fa",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Simple
text\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"lM6vvGG2cDviC2k8Ss0pvet797wz7Dq965WlO2QuWLrVcCo8gSEcPAQiBbm5St28+f3avDgPEzwUVzE9WT4KPU/wAb02Ux+88I3MOk/wAT1AkKQ7tEGzPL5csrySNMK7NZcrPSR72jxZPgo8ID+nuwDDeDztLxO9iqKtPGe3Qr1/XP07kwG5vKyNmDz9Uzw9z4kGPRiCYTyKgCc8GJNkvYVdz7sCXea7vMJEPUdEP7t1MPu6LCcdPCK/5rwup1w9LfQTPbiGkT3oDDu92opXPF5YNz0Zi4w9ll9yvKkVMb3YzuO8tB8tPQJdZjxm6su84iUXPPx1wjw+5TM8wcvuPMsI9DxHZs
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-6d4fbbf5f4-h87qf",
+ "set-cookie" :
"__cf_bm=9QGV3Kr7D_lhfWmRIp3Arh88JMYGTJjEOyacvk01pgo-1771859792.5809298-1.0.1.1-xFhKMV46g7LMfpj5qBosnPaxvpquUq36ylO3ifFMs0OPz7LnSS0XY0d6jSGg3PLSIshNScH9p0OvuyCFeDyzXrx7U00lT5bzm2wOZxCV3BY2NzAtaOQogzCzqK3uy2Qz;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:32 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_603a13c1655345b09ae05d96e1cf3516",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af57ac3ce20e-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999998",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:32 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "121",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "241446f1-554b-4cbf-8e0e-860f799c18fa",
+ "persistent" : true,
+ "scenarioName" : "scenario-1-embeddings",
+ "requiredScenarioState" : "scenario-1-embeddings-3",
+ "insertionIndex" : 13
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-74b74a7f-a14b-43ef-bbcd-6e492e07464b.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-74b74a7f-a14b-43ef-bbcd-6e492e07464b.json
new file mode 100644
index 0000000000..2375116db3
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-74b74a7f-a14b-43ef-bbcd-6e492e07464b.json
@@ -0,0 +1,46 @@
+{
+ "id" : "74b74a7f-a14b-43ef-bbcd-6e492e07464b",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Text content
1\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"cHRzum7SYTyeFNQ843xFvKodFL38ix+9ww8WPJ33e7z9IBg8sBMIPMSkDj3xj3g8hZpyvaqVtDyiWHc9O+FEO6KFjjx7cJo6yorDvG/vOT2V51U7AoITvOXDDryLNZ46TdA5PEseaTvwCj+8GD2LPH2aCz0XqJK9xjbhuuhyOb1SqVU8pbwYvbOyczzRmmk9sSAhvDrUK7zc8Vi61gskvf/CKTwa3xy8D+N1PAMHTTveK4m71FnTPAqC+rzaT8c8gd6uu1CPIz34GuW8ZjrcuqW8mLw2gEk98IJfvVXwHryH1CK99oiSPUDKn7zCat67KodIPUZFzTxyuzw8TDtBPDm3U7zSt8
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-6d4fbbf5f4-xh7mf",
+ "set-cookie" :
"__cf_bm=agsveTlLZjPbXrq_xqJS5a58Cu8NSWR6arz0WMsgVXw-1771859793.2320967-1.0.1.1-igKLFcKr2oRva0T9CUYKw8G3P9ko9LAPbytcsn..XHYnDp0EIcRDkkM_BBrfI.BtGHJZGOjQCdrqv0YzxLf.rAWfql2Jig3N3PQIG8jCZVjx_6f28W.ov0erQJxBrRzo;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:33 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_990030715e484f0d96dd862b8ef5f9a9",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af5bbda1eef9-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999997",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:33 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "92",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "74b74a7f-a14b-43ef-bbcd-6e492e07464b",
+ "persistent" : true,
+ "insertionIndex" : 11
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-7d5105a3-8c4f-4e6c-977b-bc9d4157650c.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-7d5105a3-8c4f-4e6c-977b-bc9d4157650c.json
new file mode 100644
index 0000000000..e8c6b140d3
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-7d5105a3-8c4f-4e6c-977b-bc9d4157650c.json
@@ -0,0 +1,46 @@
+{
+ "id" : "7d5105a3-8c4f-4e6c-977b-bc9d4157650c",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Simple text extra
content\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"Y6ocPO78uTv3iJE8AHlWvEKgK71LLAO9SywDPZ2VWbuvEfY6IJY6uQm3ZDy1w7O8fmRHvef5gTwLj4g8F7tePIAC0Dlf5LA7lFdLPIUYez2xm9C8IJY6PE4GHTx4sc47P2QaPGWXqTwjb5m8QlJiOw7MVD2r6Ne8XalavILbLr1ohXE9HW7XvPWvMjxpwMc8KnGWPfgmGjzn+QE9FrojvRP1cjxpXZW8eGJKPS7puDqVps88wIscu8oZajxC7y89a/sdvHo7qT3LUwU8mbqEvM1V+7jcMRk9boYzvBUcm72/An299GCuu8/fVbx3xfy8mlgNPCNvmbvV4VK7kX2xPLecErsJaG
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-6d4fbbf5f4-h87qf",
+ "set-cookie" :
"__cf_bm=j3afHXgDyDuo_nYGf_C9Ijwo37cSj3lbSb1rJ4ALpI0-1771859791.2498617-1.0.1.1-_SHQXn9j4cGNc1Q9TwghX9U4JiUSh0PU9H4nxRRKhgwDHyhHcm4SiviO.NCcUSutblUTilXUBs5vmh8NbWLlpgqPssRoyzudwP9LUMBfi1y6gutLQCfGGPomwGfJIUFt;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:32 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_0e474f7645dc45dca9de6b7c086586b8",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af4f4fa441b8-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999994",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:32 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "218",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "7d5105a3-8c4f-4e6c-977b-bc9d4157650c",
+ "persistent" : true,
+ "insertionIndex" : 15
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-bb9ce2dd-d285-491c-890a-f57a751b8155.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-bb9ce2dd-d285-491c-890a-f57a751b8155.json
new file mode 100644
index 0000000000..69ff0ce4ad
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-bb9ce2dd-d285-491c-890a-f57a751b8155.json
@@ -0,0 +1,46 @@
+{
+ "id" : "bb9ce2dd-d285-491c-890a-f57a751b8155",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Text content
2\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"w3MEvLo2njzTpkE8vbFJvVlNF73Pvju7bJ5qPMLQGbxNN7Y8ytX7O8NzBD1v5D868g4wvWFTMz1Ku1A9nKZwOy4F2DzUSay8fxd9vJDuXj2bOtC8ANZMPB4vsLshFnw8UH2LPDSQyLuMPGm8Gx9rPJ3dOj2aYo+9bdU0vNgxMr3ho2489ixGvQu14ztHdjU9vNmIPKzbobtG1IQ8UekrvV8OmDzgynO82gotPFomkjv5p3E8ZJhOPMD25LxQfNE8RtQEPGvGKT32LMa7zEOQuyY1zLxdoT098DT7vJ4UhbtULke9luVvPQt/07w3DC69cIbwPJbl7zznLl88ksgTPQJ5t7xwG4
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-6d4fbbf5f4-vcjdd",
+ "set-cookie" :
"__cf_bm=5Nj_5s024UMWl1FJPsTuRF_Ng_NzUhUoOKQUox9mOxk-1771859793.461057-1.0.1.1-opZuApUwn3jdh0pak7MEQpf5BTn17fXwM9LUYLV.7M4M2IqNbkUUQTEYjtrQtQ3RuYbWDOWD7_.QL1JhMzPPQZtpGCGf7QQimRzu_tHfSNMyPuTf7s68RrBTZAxKMmgA;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:33 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_7e7dd1f08de34439891af16809283903",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af5d19276382-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999997",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:33 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "66",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "bb9ce2dd-d285-491c-890a-f57a751b8155",
+ "persistent" : true,
+ "insertionIndex" : 10
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-cdf3ca4a-680c-4d9b-a649-6af0e4b746ec.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-cdf3ca4a-680c-4d9b-a649-6af0e4b746ec.json
new file mode 100644
index 0000000000..8df158b554
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-cdf3ca4a-680c-4d9b-a649-6af0e4b746ec.json
@@ -0,0 +1,46 @@
+{
+ "id" : "cdf3ca4a-680c-4d9b-a649-6af0e4b746ec",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Text content
3\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"l6l7vD+CozxHBN48Q8NAvVoC2Lyzkfa8hpCKPMtPebzWtrw86Z2RvCCH1TwFhow8U4AdvXa8CD3ott88w2X4O4ilBj0VCe28E/RwvLN6UT0fWQu8PVYCPRTborp9WwG86UxwPF+ruzxNKoS79GYCPK66SD1pKaS9Xf6FvLUOOb1nlby5tfcTvWnBXbsvxUY9hHuOOmkppDvdiZi7Qi0wvXfRhDznN3S80wswPMRMKrzajeo8eivwPDFCibwLWxE95JKAOg4dQz3xNnG8ghXxO2FWSLy8eU49PO47vRAyP7xKlhy9UOw1Pfkg8rvACw29yosePYXA/TuL5iM8JsQgPXIqyrwSrw
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-5b4d74bdfd-6r7ll",
+ "set-cookie" :
"__cf_bm=scZMYGkDGx3i..X09b0JX5VqUmuVKKIRIuhCvHfNmds-1771859793.6687763-1.0.1.1-0wn2eHJdF5BOTcCgRBG5edIUWr7rLIT92pJX5YS1npoO28hoYx2us7SMAu.SWR4SOVCcY1H9rZ0GxIiDiGMTD.89qRJUrvG9nGlRNe477lxzRsHrsHP_KPz4ldhlQrBX;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:33 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_daee082d108040429ac2b0063fca99d8",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af5e6fde4e1a-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999997",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:33 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "71",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "cdf3ca4a-680c-4d9b-a649-6af0e4b746ec",
+ "persistent" : true,
+ "insertionIndex" : 9
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-e04198c2-a03b-4c4b-96ac-dc2b6260c203.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-e04198c2-a03b-4c4b-96ac-dc2b6260c203.json
new file mode 100644
index 0000000000..a1ad588718
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-e04198c2-a03b-4c4b-96ac-dc2b6260c203.json
@@ -0,0 +1,49 @@
+{
+ "id" : "e04198c2-a03b-4c4b-96ac-dc2b6260c203",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Simple
text\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"nMqvvMcHbzsZY2g8KuopvVV297z75zq9ABWmO/eOTbqTKyo83rsbPJx7Ibm6Rd28CPnavLiOEzyqETE9OjsKPbv9Ab2sliC84nzEOrv9AT3h3qc7xp+zPAM4srypjMG7ODErPeqW2jw6Owo8o0apu4EfeTzmCxO9NV2tPAKzQr3luP07Zv24vPCqmDxUDjw9XEUGPYggYjwsvic8pK5kvYx5z7tW++a7l51EPen4Pbt+S/u66wIdPAsc57yd41w91vATPW+DkT375zq9v+1YPDtUNz3th4w9APhxvPbwML1LiOO8zBstPQscZzyug8u84mMXPORQwjxNQzQ8XsbuPEkD9DxpIM
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-6d4fbbf5f4-c65tj",
+ "set-cookie" :
"__cf_bm=bgfhD3MAplsuLC91W1RO.HjAKOhXJvHw98I6giP7tV0-1771859792.3342004-1.0.1.1-d0Xr1Qs6MlgoaRNi5K2Xlb.cExQ1rWiPRaYW5c77oWPeuo6XlvgfKFE1AojoXMAps_p6wfxK8NfRB09lFKZblZ8cxd_iuQIhDebq_DVp_PSglP2aOyKfzyzhQ3JgbGnh;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:32 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_05efd7161de54636b1e2501e46b9e309",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af561f55f578-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999998",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:32 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "91",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "e04198c2-a03b-4c4b-96ac-dc2b6260c203",
+ "persistent" : true,
+ "scenarioName" : "scenario-1-embeddings",
+ "requiredScenarioState" : "scenario-1-embeddings-2",
+ "newScenarioState" : "scenario-1-embeddings-3",
+ "insertionIndex" : 14
+}
\ No newline at end of file
diff --git
a/integration-tests/openai/src/test/resources/mappings/embeddings-ebc01e5b-f3fa-4fce-bd96-e6a7e2e49dee.json
b/integration-tests/openai/src/test/resources/mappings/embeddings-ebc01e5b-f3fa-4fce-bd96-e6a7e2e49dee.json
new file mode 100644
index 0000000000..11cbb2c2f3
--- /dev/null
+++
b/integration-tests/openai/src/test/resources/mappings/embeddings-ebc01e5b-f3fa-4fce-bd96-e6a7e2e49dee.json
@@ -0,0 +1,49 @@
+{
+ "id" : "ebc01e5b-f3fa-4fce-bd96-e6a7e2e49dee",
+ "name" : "embeddings",
+ "request" : {
+ "url" : "/embeddings",
+ "method" : "POST",
+ "bodyPatterns" : [ {
+ "equalToJson" : "{\"input\":\"Simple
text\",\"model\":\"text-embedding-3-small\",\"encoding_format\":\"base64\"}",
+ "ignoreArrayOrder" : true,
+ "ignoreExtraElements" : true
+ } ]
+ },
+ "response" : {
+ "status" : 200,
+ "body" : "{\n \"object\": \"list\",\n \"data\": [\n {\n
\"object\": \"embedding\",\n \"index\": 0,\n \"embedding\":
\"lM6vvGG2cDviC2k8Ss0pvet797wz7Dq965WlO2QuWLrVcCo8gSEcPAQiBbm5St28+f3avDgPEzwUVzE9WT4KPU/wAb02Ux+88I3MOk/wAT1AkKQ7tEGzPL5csrySNMK7NZcrPSR72jxZPgo8ID+nuwDDeDztLxO9iqKtPGe3Qr1/XP07kwG5vKyNmDz9Uzw9z4kGPRiCYTyKgCc8GJNkvYVdz7sCXea7vMJEPUdEP7t1MPu6LCcdPCK/5rwup1w9LfQTPbiGkT3oDDu92opXPF5YNz0Zi4w9ll9yvKkVMb3YzuO8tB8tPQJdZjxm6su84iUXPPx1wjw+5TM8wcvuPMsI9DxHZs
[...]
+ "headers" : {
+ "Server" : "cloudflare",
+ "x-ratelimit-reset-tokens" : "0s",
+ "via" : "envoy-router-5b4d74bdfd-bsf89",
+ "set-cookie" :
"__cf_bm=gtzCq7O8bil3WA.lTj8I1ZFZz17O5x0h85hGpU653uU-1771859790.876889-1.0.1.1-WGELHZrqhnpt9JXZj6esGPWeneorXO78vAItbdvIkFm5RU021FqJAXxLjQ_46wf9pK02CZsHSEOyVhcpMOJWXUo9zHRWNSfxZXJAJ_LosT20DhYg61Xy9Dq.FHbSF2vZ;
HttpOnly; Secure; Path=/; Domain=api.openai.com; Expires=Mon, 23 Feb 2026
15:46:30 GMT",
+ "Content-Type" : "application/json",
+ "x-request-id" : "req_61963e50c0944c1c8ac6ed77cfe7aa4f",
+ "x-ratelimit-limit-tokens" : "1000000",
+ "openai-organization" : "user-nvrq0gduw4i0ooapnshoh6gw",
+ "CF-RAY" : "9d27af4cf8eb654a-LHR",
+ "X-Content-Type-Options" : "nosniff",
+ "x-ratelimit-reset-requests" : "20ms",
+ "x-openai-proxy-wasm" : "v0.1",
+ "x-ratelimit-remaining-tokens" : "999998",
+ "cf-cache-status" : "DYNAMIC",
+ "x-ratelimit-remaining-requests" : "2999",
+ "strict-transport-security" : "max-age=31536000; includeSubDomains;
preload",
+ "Date" : "Mon, 23 Feb 2026 15:16:30 GMT",
+ "access-control-expose-headers" : "X-Request-ID",
+ "access-control-allow-origin" : "*",
+ "x-ratelimit-limit-requests" : "3000",
+ "openai-version" : "2020-10-01",
+ "openai-processing-ms" : "63",
+ "openai-model" : "text-embedding-3-small",
+ "alt-svc" : "h3=\":443\"; ma=86400"
+ }
+ },
+ "uuid" : "ebc01e5b-f3fa-4fce-bd96-e6a7e2e49dee",
+ "persistent" : true,
+ "scenarioName" : "scenario-1-embeddings",
+ "requiredScenarioState" : "Started",
+ "newScenarioState" : "scenario-1-embeddings-2",
+ "insertionIndex" : 16
+}
\ No newline at end of file