Skip to content

Commit 2718c28

Browse files
committed
fix: ignore error when token usage not found in response
1 parent a3305bb commit 2718c28

File tree

4 files changed

+193
-69
lines changed

4 files changed

+193
-69
lines changed

src/main/java/io/gravitee/policy/ai/token/track/ProviderExtractor.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@ public sealed interface ProviderExtractor extends Function<HttpPlainExecutionCon
2424
record ProviderExtractorTokenOnly(String inputTokenPtr, String outputTokenPtr) implements ProviderExtractor {
2525
@Override
2626
public Maybe<Tokens<Long>> apply(HttpPlainExecutionContext ctx) {
27-
var in = ctx.getTemplateEngine().eval(inputTokenPtr(), Long.class);
28-
var out = ctx.getTemplateEngine().eval(outputTokenPtr(), Long.class);
27+
var in = ctx.getTemplateEngine().eval(inputTokenPtr(), Long.class).onErrorComplete();
28+
var out = ctx.getTemplateEngine().eval(outputTokenPtr(), Long.class).onErrorComplete();
2929
return Maybe.zip(in, out, Tokens.TokensOnly::new);
3030
}
3131
}
3232

3333
record ProviderExtractorTokenAndModel(String inputTokenPtr, String outputTokenPtr, String modelPtr) implements ProviderExtractor {
3434
@Override
3535
public Maybe<Tokens<Long>> apply(HttpPlainExecutionContext ctx) {
36-
var in = ctx.getTemplateEngine().eval(inputTokenPtr(), Long.class);
37-
var out = ctx.getTemplateEngine().eval(outputTokenPtr(), Long.class);
38-
var model = ctx.getTemplateEngine().eval(modelPtr(), String.class).defaultIfEmpty("").toMaybe();
36+
var in = ctx.getTemplateEngine().eval(inputTokenPtr(), Long.class).onErrorComplete();
37+
var out = ctx.getTemplateEngine().eval(outputTokenPtr(), Long.class).onErrorComplete();
38+
var model = ctx.getTemplateEngine().eval(modelPtr(), String.class).onErrorComplete().defaultIfEmpty("").toMaybe();
3939
return Maybe.zip(in, out, model, Tokens::of);
4040
}
4141
}

src/test/java/io/gravitee/policy/ai/token/track/AbstractAiTokenTrackPolicyIntegrationTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616
package io.gravitee.policy.ai.token.track;
1717

18-
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
18+
import static org.assertj.core.api.Assertions.assertThat;
1919

2020
import com.github.tomakehurst.wiremock.WireMockServer;
2121
import com.github.tomakehurst.wiremock.client.WireMock;
@@ -29,6 +29,7 @@
2929
import io.gravitee.plugin.entrypoint.http.proxy.HttpProxyEntrypointConnectorFactory;
3030
import io.gravitee.policy.ai.token.track.configuration.AiTokenTrackingConfiguration;
3131
import io.gravitee.reporter.api.v4.metric.Metrics;
32+
import io.reactivex.rxjava3.core.Completable;
3233
import io.reactivex.rxjava3.subjects.BehaviorSubject;
3334
import io.vertx.core.http.HttpMethod;
3435
import io.vertx.rxjava3.core.http.HttpClient;
@@ -119,6 +120,7 @@ void setUp() {
119120
fakeReporter.setReportableHandler(reportable -> {
120121
if (reportable instanceof Metrics metrics) {
121122
metricsSubject.onNext(metrics);
123+
metricsSubject.onComplete();
122124
}
123125
});
124126
}
@@ -132,12 +134,12 @@ protected void stubBackend(WireMockServer wiremock) {
132134
wiremock.stubFor(WireMock.post("/without-model").willReturn(WireMock.jsonResponse(CUSTOM_RESPONSE_WITHOUT_MODEL, 200)));
133135
}
134136

135-
protected void send(HttpClient client, String path) {
136-
client
137+
protected Completable send(HttpClient client, String path) {
138+
return client
137139
.rxRequest(HttpMethod.POST, path)
138140
.flatMap(HttpClientRequest::rxSend)
139-
.doOnSuccess(response -> assertThat(response.statusCode()).isEqualTo(200))
140-
.subscribe();
141+
.map(response -> assertThat(response.statusCode()).isEqualTo(200))
142+
.ignoreElement();
141143
}
142144

143145
@Override

0 commit comments

Comments
 (0)