Skip to content

Commit e520025

Browse files
committed
Update Gemini and OpenAi ModelAuthProvider to use ManagedExecutor
1 parent 1d6503a commit e520025

File tree

3 files changed

+40
-70
lines changed

3 files changed

+40
-70
lines changed

integration-tests/vertex-ai-gemini/src/main/java/org/acme/example/gemini/aiservices/DummyAuthProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ public class DummyAuthProvider implements ModelAuthProvider {
99

1010
@Override
1111
public String getAuthorization(Input input) {
12+
try {
13+
Thread.sleep(5000);
14+
} catch (InterruptedException ex) {
15+
}
1216
return "Bearer token";
1317
}
1418

model-providers/google/gemini/gemini-common/runtime/src/main/java/io/quarkiverse/langchain4j/gemini/common/ModelAuthProviderFilter.java

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,64 +5,47 @@
55
import java.net.URI;
66
import java.util.concurrent.Executor;
77

8-
import jakarta.enterprise.inject.Instance;
9-
import jakarta.enterprise.inject.spi.CDI;
108
import jakarta.ws.rs.core.MultivaluedMap;
119

10+
import org.eclipse.microprofile.context.ManagedExecutor;
1211
import org.jboss.resteasy.reactive.client.spi.ResteasyReactiveClientRequestContext;
1312
import org.jboss.resteasy.reactive.client.spi.ResteasyReactiveClientRequestFilter;
1413

1514
import com.google.auth.oauth2.GoogleCredentials;
1615

1716
import io.quarkiverse.langchain4j.auth.ModelAuthProvider;
18-
import io.vertx.core.Context;
19-
import io.vertx.core.Vertx;
17+
import io.quarkus.arc.Arc;
18+
import io.quarkus.arc.InstanceHandle;
19+
import io.smallrye.mutiny.infrastructure.Infrastructure;
2020

2121
public class ModelAuthProviderFilter implements ResteasyReactiveClientRequestFilter {
2222

2323
private final ModelAuthProvider authorizer;
24-
private final Vertx vertx;
2524

2625
public ModelAuthProviderFilter(String modelId) {
2726
this.authorizer = ModelAuthProvider.resolve(modelId).orElse(new ApplicationDefaultAuthProvider());
28-
this.vertx = vertx();
29-
}
30-
31-
private static Vertx vertx() {
32-
Instance<Vertx> vertxInstance = CDI.current().select(Vertx.class);
33-
return vertxInstance.isResolvable() ? vertxInstance.get() : null;
3427
}
3528

3629
@Override
3730
public void filter(ResteasyReactiveClientRequestContext requestContext) {
38-
if (vertx != null) {
39-
Executor executorService = createExecutor();
40-
requestContext.suspend();
41-
executorService.execute(new Runnable() {
42-
@Override
43-
public void run() {
44-
try {
45-
setAuthorization(requestContext);
46-
requestContext.resume();
47-
} catch (Exception e) {
48-
requestContext.resume(e);
49-
}
31+
Executor executorService = createExecutor();
32+
requestContext.suspend();
33+
executorService.execute(new Runnable() {
34+
@Override
35+
public void run() {
36+
try {
37+
setAuthorization(requestContext);
38+
requestContext.resume();
39+
} catch (Exception e) {
40+
requestContext.resume(e);
5041
}
51-
});
52-
} else {
53-
setAuthorization(requestContext);
54-
}
55-
42+
}
43+
});
5644
}
5745

5846
private Executor createExecutor() {
59-
Context context = vertx.getOrCreateContext();
60-
return new Executor() {
61-
@Override
62-
public void execute(Runnable command) {
63-
context.runOnContext(v -> command.run());
64-
}
65-
};
47+
InstanceHandle<ManagedExecutor> executor = Arc.container().instance(ManagedExecutor.class);
48+
return executor.isAvailable() ? executor.get() : Infrastructure.getDefaultExecutor();
6649
}
6750

6851
private void setAuthorization(ResteasyReactiveClientRequestContext requestContext) {

model-providers/openai/openai-common/runtime/src/main/java/io/quarkiverse/langchain4j/openai/common/OpenAiRestApi.java

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import java.util.function.Predicate;
1616

1717
import jakarta.annotation.Priority;
18-
import jakarta.enterprise.inject.Instance;
19-
import jakarta.enterprise.inject.spi.CDI;
2018
import jakarta.ws.rs.BeanParam;
2119
import jakarta.ws.rs.Consumes;
2220
import jakarta.ws.rs.HeaderParam;
@@ -36,6 +34,7 @@
3634
import jakarta.ws.rs.ext.WriterInterceptor;
3735
import jakarta.ws.rs.ext.WriterInterceptorContext;
3836

37+
import org.eclipse.microprofile.context.ManagedExecutor;
3938
import org.eclipse.microprofile.rest.client.annotation.RegisterProvider;
4039
import org.jboss.logging.Logger;
4140
import org.jboss.resteasy.reactive.RestStreamElementType;
@@ -62,13 +61,14 @@
6261
import dev.langchain4j.model.openai.internal.moderation.ModerationResponse;
6362
import io.quarkiverse.langchain4j.QuarkusJsonCodecFactory;
6463
import io.quarkiverse.langchain4j.auth.ModelAuthProvider;
64+
import io.quarkus.arc.Arc;
65+
import io.quarkus.arc.InstanceHandle;
6566
import io.quarkus.rest.client.reactive.ClientExceptionMapper;
6667
import io.smallrye.mutiny.Multi;
6768
import io.smallrye.mutiny.Uni;
68-
import io.vertx.core.Context;
69+
import io.smallrye.mutiny.infrastructure.Infrastructure;
6970
import io.vertx.core.Handler;
7071
import io.vertx.core.MultiMap;
71-
import io.vertx.core.Vertx;
7272
import io.vertx.core.buffer.Buffer;
7373
import io.vertx.core.http.HttpClientRequest;
7474
import io.vertx.core.http.HttpClientResponse;
@@ -190,48 +190,31 @@ public boolean test(SseEvent<String> event) {
190190

191191
class OpenAIRestAPIFilter implements ResteasyReactiveClientRequestFilter {
192192
ModelAuthProvider authorizer;
193-
Vertx vertx;
194193

195194
public OpenAIRestAPIFilter(ModelAuthProvider authorizer) {
196195
this.authorizer = authorizer;
197-
this.vertx = vertx();
198-
}
199-
200-
private static Vertx vertx() {
201-
Instance<Vertx> vertxInstance = CDI.current().select(Vertx.class);
202-
return vertxInstance.isResolvable() ? vertxInstance.get() : null;
203196
}
204197

205198
@Override
206199
public void filter(ResteasyReactiveClientRequestContext requestContext) {
207-
if (vertx != null) {
208-
Executor executorService = createExecutor();
209-
requestContext.suspend();
210-
executorService.execute(new Runnable() {
211-
@Override
212-
public void run() {
213-
try {
214-
setAuthorization(requestContext);
215-
requestContext.resume();
216-
} catch (Exception e) {
217-
requestContext.resume(e);
218-
}
200+
Executor executorService = createExecutor();
201+
requestContext.suspend();
202+
executorService.execute(new Runnable() {
203+
@Override
204+
public void run() {
205+
try {
206+
setAuthorization(requestContext);
207+
requestContext.resume();
208+
} catch (Exception e) {
209+
requestContext.resume(e);
219210
}
220-
});
221-
} else {
222-
setAuthorization(requestContext);
223-
}
224-
211+
}
212+
});
225213
}
226214

227215
private Executor createExecutor() {
228-
Context context = vertx.getOrCreateContext();
229-
return new Executor() {
230-
@Override
231-
public void execute(Runnable command) {
232-
context.runOnContext(v -> command.run());
233-
}
234-
};
216+
InstanceHandle<ManagedExecutor> executor = Arc.container().instance(ManagedExecutor.class);
217+
return executor.isAvailable() ? executor.get() : Infrastructure.getDefaultExecutor();
235218
}
236219

237220
private void setAuthorization(ResteasyReactiveClientRequestContext requestContext) {

0 commit comments

Comments
 (0)