|
6 | 6 | package io.opentelemetry.instrumentation.openai.v1_1; |
7 | 7 |
|
8 | 8 | import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; |
| 9 | +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; |
9 | 10 | import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; |
10 | 11 | import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_REQUEST_ENCODING_FORMATS; |
11 | 12 | import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_REQUEST_MODEL; |
@@ -85,16 +86,27 @@ void basic() { |
85 | 86 | getTesting() |
86 | 87 | .waitAndAssertTraces( |
87 | 88 | trace -> |
88 | | - maybeWithTransportSpan( |
89 | | - span -> |
90 | | - span.hasName("embeddings text-embedding-3-small") |
91 | | - .hasKind(SpanKind.CLIENT) |
92 | | - .hasAttributesSatisfyingExactly( |
93 | | - equalTo(GEN_AI_SYSTEM, OPENAI), |
94 | | - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), |
95 | | - equalTo(GEN_AI_REQUEST_MODEL, MODEL), |
96 | | - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), |
97 | | - equalTo(GEN_AI_USAGE_INPUT_TOKENS, 4)))); |
| 89 | + trace.hasSpansSatisfyingExactly( |
| 90 | + maybeWithTransportSpan( |
| 91 | + span -> |
| 92 | + span.hasName("embeddings text-embedding-3-small") |
| 93 | + .hasKind(SpanKind.CLIENT) |
| 94 | + .hasAttributesSatisfyingExactly( |
| 95 | + equalTo(GEN_AI_SYSTEM, OPENAI), |
| 96 | + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), |
| 97 | + equalTo(GEN_AI_REQUEST_MODEL, MODEL), |
| 98 | + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), |
| 99 | + equalTo(GEN_AI_USAGE_INPUT_TOKENS, 4), |
| 100 | + // Newer versions of the library populate base64 when unset by |
| 101 | + // the user. |
| 102 | + satisfies( |
| 103 | + GEN_AI_REQUEST_ENCODING_FORMATS, |
| 104 | + val -> |
| 105 | + val.satisfiesAnyOf( |
| 106 | + v -> assertThat(v).isNull(), |
| 107 | + v -> |
| 108 | + assertThat(v) |
| 109 | + .isEqualTo(singletonList("base64")))))))); |
98 | 110 |
|
99 | 111 | getTesting() |
100 | 112 | .waitAndAssertMetrics( |
@@ -147,17 +159,19 @@ void allTheClientOptions() { |
147 | 159 | getTesting() |
148 | 160 | .waitAndAssertTraces( |
149 | 161 | trace -> |
150 | | - maybeWithTransportSpan( |
151 | | - span -> |
152 | | - span.hasName("embeddings text-embedding-3-small") |
153 | | - .hasKind(SpanKind.CLIENT) |
154 | | - .hasAttributesSatisfyingExactly( |
155 | | - equalTo(GEN_AI_SYSTEM, OPENAI), |
156 | | - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), |
157 | | - equalTo(GEN_AI_REQUEST_MODEL, MODEL), |
158 | | - equalTo(GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), |
159 | | - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), |
160 | | - equalTo(GEN_AI_USAGE_INPUT_TOKENS, 4)))); |
| 162 | + trace.hasSpansSatisfyingExactly( |
| 163 | + maybeWithTransportSpan( |
| 164 | + span -> |
| 165 | + span.hasName("embeddings text-embedding-3-small") |
| 166 | + .hasKind(SpanKind.CLIENT) |
| 167 | + .hasAttributesSatisfyingExactly( |
| 168 | + equalTo(GEN_AI_SYSTEM, OPENAI), |
| 169 | + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), |
| 170 | + equalTo(GEN_AI_REQUEST_MODEL, MODEL), |
| 171 | + equalTo( |
| 172 | + GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), |
| 173 | + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), |
| 174 | + equalTo(GEN_AI_USAGE_INPUT_TOKENS, 4))))); |
161 | 175 |
|
162 | 176 | getTesting() |
163 | 177 | .waitAndAssertMetrics( |
@@ -226,11 +240,22 @@ void connectionError() { |
226 | 240 | maybeWithTransportSpan( |
227 | 241 | span -> |
228 | 242 | span.hasName("embeddings text-embedding-3-small") |
| 243 | + .hasKind(SpanKind.CLIENT) |
229 | 244 | .hasException(thrown) |
230 | 245 | .hasAttributesSatisfyingExactly( |
231 | 246 | equalTo(GEN_AI_SYSTEM, OPENAI), |
232 | 247 | equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), |
233 | | - equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); |
| 248 | + equalTo(GEN_AI_REQUEST_MODEL, MODEL), |
| 249 | + // Newer versions of the library populate base64 when unset by |
| 250 | + // the user. |
| 251 | + satisfies( |
| 252 | + GEN_AI_REQUEST_ENCODING_FORMATS, |
| 253 | + val -> |
| 254 | + val.satisfiesAnyOf( |
| 255 | + v -> assertThat(v).isNull(), |
| 256 | + v -> |
| 257 | + assertThat(v) |
| 258 | + .isEqualTo(singletonList("base64")))))))); |
234 | 259 |
|
235 | 260 | getTesting() |
236 | 261 | .waitAndAssertMetrics( |
|
0 commit comments