Skip to content

Add LangChain4j member #1524

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

Conversation

aloubyansky
Copy link
Member

@aloubyansky aloubyansky commented Jul 8, 2025

This PR adds LangChain4j member, integrating 1.1.0.CR1 version of the library.

Closes quarkiverse/quarkus-langchain4j#1553

@aloubyansky
Copy link
Member Author

@ppalaga FYI. This will break Camel Quarkus tests.

Copy link

quarkus-bot bot commented Jul 8, 2025

Status for workflow CI Build

This is the status report for running CI Build on commit acd754f.

Failing Jobs

Status Name Step Failures Logs Raw logs
Build - JDK 17 Build with Maven Failures Logs Raw logs

Full information is available in the Build summary check run.

Failures

⚙️ Build - JDK 17 #

- Failing: Root module 

📦 Root module

Failed to execute goal io.quarkus:quarkus-platform-bom-maven-plugin:0.0.121:invoke-platform-project (build-platform-project) on project quarkus-platform-config: Failed to build the platform project, please consult the errors logged above.

📦 generated-platform-project/quarkus-blaze-persistence/integration-tests/blaze-persistence-examples-quarkus-3-testsuite-base

com.blazebit.examples.quarkus.testsuite.base.QuarkusExampleTest.updatePerson - More details - Source on GitHub

java.lang.RuntimeException: java.lang.ExceptionInInitializerError
	at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:668)
	at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:763)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.ExceptionInInitializerError
	at java.base/java.lang.Class.forName0(Native Method)

📦 generated-platform-project/quarkus-camel/integration-tests/camel-quarkus-integration-test-langchain4j

org.apache.camel.quarkus.component.langchain4jit.LangChain4jTest.aiServiceShouldBeResolvedByInterface line 44 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <200> but was <500>.

	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)

org.apache.camel.quarkus.component.langchain4jit.LangChain4jTest.aiServiceShouldBeResolvedByName line 53 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <200> but was <500>.

	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)

org.apache.camel.quarkus.component.langchain4jit.LangChain4jTest.camelAnnotationsShouldWorkAsExpected line 34 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <200> but was <500>.

	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)

📦 generated-platform-project/quarkus-camel/integration-tests/camel-quarkus-integration-test-langchain4j-tokenizer

org.apache.camel.quarkus.component.langchain4j.tokenizer.it.Langchain4jTokenizerTest.tokenizeSentences - More details - Source on GitHub

java.lang.RuntimeException: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:668)
	at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:763)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.RuntimeException: Failed to start quarkus
	at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)

📦 generated-platform-project/quarkus-langchain4j/integration-tests/quarkus-langchain4j-integration-test-easy-rag

org.acme.example.EasyRagCodestartTest.testContent line 21 - More details - Source on GitHub

java.lang.NullPointerException: Cannot invoke "io.quarkus.paths.PathTree.getRoots()" because "t" is null
	at io.quarkus.paths.MultiRootPathTree.<init>(MultiRootPathTree.java:23)
	at io.quarkus.devtools.testing.SnapshotTesting.getSnapshotsBaseTree(SnapshotTesting.java:88)
	at io.quarkus.devtools.testing.SnapshotTesting.withSnapshotsDir(SnapshotTesting.java:95)
	at io.quarkus.devtools.testing.SnapshotTesting.assertThatDirectoryTreeMatchSnapshots(SnapshotTesting.java:243)
	at io.quarkus.devtools.testing.codestarts.QuarkusCodestartTest.assertThatGeneratedTreeMatchSnapshots(QuarkusCodestartTest.java:289)
	at org.acme.example.EasyRagCodestartTest.testContent(EasyRagCodestartTest.java:21)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)

@aloubyansky
Copy link
Member Author

For Blaze persistence the error is

2025-07-08T10:20:44.4803380Z [ERROR] com.blazebit.examples.quarkus.testsuite.base.QuarkusExampleTest.updatePerson  Time elapsed: 0.024 s  <<< ERROR!
2025-07-08T10:20:44.4804519Z java.lang.RuntimeException: java.lang.ExceptionInInitializerError
2025-07-08T10:20:44.4805534Z 	at io.quarkus.test.junit.QuarkusTestExtension.throwBootFailureException(QuarkusTestExtension.java:668)
2025-07-08T10:20:44.4806981Z 	at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:763)
2025-07-08T10:20:44.4807978Z 	at java.base/java.util.Optional.orElseGet(Optional.java:364)
2025-07-08T10:20:44.4808633Z 	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
2025-07-08T10:20:44.4809447Z 	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
2025-07-08T10:20:44.4810043Z Caused by: java.lang.ExceptionInInitializerError
2025-07-08T10:20:44.4810648Z 	at java.base/java.lang.Class.forName0(Native Method)
2025-07-08T10:20:44.4811224Z 	at java.base/java.lang.Class.forName(Class.java:467)
2025-07-08T10:20:44.4811986Z 	at io.quarkus.runner.bootstrap.StartupActionImpl.run(StartupActionImpl.java:294)
2025-07-08T10:20:44.4830203Z 	at io.quarkus.test.junit.QuarkusTestExtension.doJavaStart(QuarkusTestExtension.java:233)
2025-07-08T10:20:44.4831285Z 	at io.quarkus.test.junit.QuarkusTestExtension.ensureStarted(QuarkusTestExtension.java:642)
2025-07-08T10:20:44.4832348Z 	at io.quarkus.test.junit.QuarkusTestExtension.beforeAll(QuarkusTestExtension.java:687)
2025-07-08T10:20:44.4833044Z 	... 1 more
2025-07-08T10:20:44.4833449Z Caused by: java.lang.RuntimeException: Failed to start quarkus
2025-07-08T10:20:44.4834133Z 	at io.quarkus.runner.ApplicationImpl.<clinit>(Unknown Source)
2025-07-08T10:20:44.4834635Z 	... 7 more
2025-07-08T10:20:44.4835134Z Caused by: java.lang.NoClassDefFoundError: org/hibernate/engine/spi/Mapping
2025-07-08T10:20:44.4835802Z 	at java.base/java.lang.Class.forName0(Native Method)
2025-07-08T10:20:44.4836371Z 	at java.base/java.lang.Class.forName(Class.java:467)
2025-07-08T10:20:44.4836840Z 	at io.quarkus.runner.recorded.HibernateOrmProcessor$build1311493863.deploy_0(Unknown Source)
2025-07-08T10:20:44.4837456Z 	at io.quarkus.runner.recorded.HibernateOrmProcessor$build1311493863.deploy(Unknown Source)
2025-07-08T10:20:44.4837892Z 	... 8 more
2025-07-08T10:20:44.4838214Z Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.spi.Mapping
2025-07-08T10:20:44.4839220Z 	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
2025-07-08T10:20:44.4840353Z 	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
2025-07-08T10:20:44.4841800Z 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
2025-07-08T10:20:44.4842797Z 	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:576)
2025-07-08T10:20:44.4843970Z 	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:523)
2025-07-08T10:20:44.4844766Z 	... 12 more

@aloubyansky
Copy link
Member Author

For Camel Quarkus

2025-07-08T09:46:45.3601397Z 	Caused by: java.lang.NoClassDefFoundError: dev/langchain4j/model/chat/ChatLanguageModel
2025-07-08T09:46:45.3602897Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$AiServiceResolvedByInterfaceModelSupplier.get(AiServiceResolvedByInterface.java:36)
2025-07-08T09:46:45.3604854Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$AiServiceResolvedByInterfaceModelSupplier.get(AiServiceResolvedByInterface.java:33)
2025-07-08T09:46:45.3606646Z 		at io.quarkiverse.langchain4j.runtime.AiServicesRecorder$3.apply(AiServicesRecorder.java:131)
2025-07-08T09:46:45.3607790Z 		at io.quarkiverse.langchain4j.runtime.AiServicesRecorder$3.apply(AiServicesRecorder.java:113)
2025-07-08T09:46:45.3609421Z 		at io.quarkiverse.langchain4j.runtime.aiservice.QuarkusAiServiceContext_2apUaNtlkEGVlK5CR2-vDhlEM3s_Synthetic_Bean.createSynthetic(Unknown Source)
2025-07-08T09:46:45.3611306Z 		at io.quarkiverse.langchain4j.runtime.aiservice.QuarkusAiServiceContext_2apUaNtlkEGVlK5CR2-vDhlEM3s_Synthetic_Bean.doCreate(Unknown Source)
2025-07-08T09:46:45.3613116Z 		at io.quarkiverse.langchain4j.runtime.aiservice.QuarkusAiServiceContext_2apUaNtlkEGVlK5CR2-vDhlEM3s_Synthetic_Bean.create(Unknown Source)
2025-07-08T09:46:45.3614758Z 		at io.quarkiverse.langchain4j.runtime.aiservice.QuarkusAiServiceContext_2apUaNtlkEGVlK5CR2-vDhlEM3s_Synthetic_Bean.get(Unknown Source)
2025-07-08T09:46:45.3617659Z 		at io.quarkiverse.langchain4j.runtime.aiservice.QuarkusAiServiceContext_2apUaNtlkEGVlK5CR2-vDhlEM3s_Synthetic_Bean.get(Unknown Source)
2025-07-08T09:46:45.3619381Z 		at io.quarkus.arc.impl.CurrentInjectionPointProvider.get(CurrentInjectionPointProvider.java:48)
2025-07-08T09:46:45.3620847Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$$QuarkusImpl_Bean.doCreate(Unknown Source)
2025-07-08T09:46:45.3622574Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$$QuarkusImpl_Bean.create(Unknown Source)
2025-07-08T09:46:45.3624176Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$$QuarkusImpl_Bean.create(Unknown Source)
2025-07-08T09:46:45.3625628Z 		at io.quarkus.arc.impl.AbstractSharedContext.createInstanceHandle(AbstractSharedContext.java:119)
2025-07-08T09:46:45.3626971Z 		at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:38)
2025-07-08T09:46:45.3627877Z 		at io.quarkus.arc.impl.AbstractSharedContext$1.get(AbstractSharedContext.java:35)
2025-07-08T09:46:45.3629144Z 		at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.c2(Unknown Source)
2025-07-08T09:46:45.3630684Z 		at io.quarkus.arc.generator.Default_jakarta_enterprise_context_ApplicationScoped_ContextInstances.computeIfAbsent(Unknown Source)
2025-07-08T09:46:45.3631994Z 		at io.quarkus.arc.impl.AbstractSharedContext.get(AbstractSharedContext.java:35)
2025-07-08T09:46:45.3633067Z 		at io.quarkus.arc.impl.ClientProxies.getApplicationScopedDelegate(ClientProxies.java:23)
2025-07-08T09:46:45.3634553Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$$QuarkusImpl_ClientProxy.arc$delegate(Unknown Source)
2025-07-08T09:46:45.3636441Z 		at org.apache.camel.quarkus.component.langchain.it.AiServiceResolvedByInterface$$QuarkusImpl_ClientProxy.chat(Unknown Source)
2025-07-08T09:46:45.3637642Z 		at java.base/java.lang.reflect.Method.invoke(Method.java:569)
2025-07-08T09:46:45.3638493Z 		at org.apache.camel.support.ObjectHelper.invokeMethodSafe(ObjectHelper.java:485)
2025-07-08T09:46:45.3639445Z 		at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:506)
2025-07-08T09:46:45.3640349Z 		at org.apache.camel.component.bean.MethodInfo$1.doProceed(MethodInfo.java:309)
2025-07-08T09:46:45.3641429Z 		at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:286)
2025-07-08T09:46:45.3642100Z 		... 38 more
2025-07-08T09:46:45.3642744Z 	Caused by: java.lang.ClassNotFoundException: dev.langchain4j.model.chat.ChatLanguageModel
2025-07-08T09:46:45.3643748Z 		at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
2025-07-08T09:46:45.3644757Z 		at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
2025-07-08T09:46:45.3645665Z 		at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
2025-07-08T09:46:45.3647141Z 		at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:576)
2025-07-08T09:46:45.3648319Z 		at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:523)
2025-07-08T09:46:45.3649565Z 		at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:576)
2025-07-08T09:46:45.3650938Z 		at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:523)
2025-07-08T09:46:45.3651737Z 		... 65 more

@aloubyansky
Copy link
Member Author

Also for Camel Quarkus

2025-07-08T09:46:18.1126249Z Caused by: java.lang.NoClassDefFoundError: dev/langchain4j/model/Tokenizer
2025-07-08T09:46:18.1127562Z 	at org.apache.camel.component.langchain4j.tokenizer.AbstractLangChain4JTokenizer.configure(AbstractLangChain4JTokenizer.java:36)
2025-07-08T09:46:18.1129262Z 	at org.apache.camel.component.langchain4j.tokenizer.LangChain4JLineTokenizer.configure(LangChain4JLineTokenizer.java:33)
2025-07-08T09:46:18.1130638Z 	at org.apache.camel.reifier.tokenizer.TokenizerReifier.configure(TokenizerReifier.java:77)
2025-07-08T09:46:18.1131792Z 	at org.apache.camel.reifier.tokenizer.TokenizerReifier.createProcessor(TokenizerReifier.java:59)
2025-07-08T09:46:18.1132924Z 	at org.apache.camel.reifier.ProcessorReifier.makeProcessor(ProcessorReifier.java:848)
2025-07-08T09:46:18.1133992Z 	at org.apache.camel.reifier.ProcessorReifier.addRoutes(ProcessorReifier.java:621)
2025-07-08T09:46:18.1134928Z 	at org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:231)
2025-07-08T09:46:18.1135805Z 	at org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:86)
2025-07-08T09:46:18.1137159Z 	at org.apache.camel.impl.DefaultModelReifierFactory.createRoute(DefaultModelReifierFactory.java:49)
2025-07-08T09:46:18.1138386Z 	at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:736)
2025-07-08T09:46:18.1139561Z 	at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:597)
2025-07-08T09:46:18.1140739Z 	at org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2473)
2025-07-08T09:46:18.1141351Z 	at org.apache.camel.quarkus.core.FastCamelContext.doInit(FastCamelContext.java:195)
2025-07-08T09:46:18.1141865Z 	at org.apache.camel.support.service.BaseService.init(BaseService.java:85)
2025-07-08T09:46:18.1142491Z 	at org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2103)
2025-07-08T09:46:18.1143044Z 	at org.apache.camel.support.service.BaseService.start(BaseService.java:115)
2025-07-08T09:46:18.1143599Z 	at org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2122)
2025-07-08T09:46:18.1144207Z 	at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:211)
2025-07-08T09:46:18.1144701Z 	at org.apache.camel.quarkus.main.CamelMain.doStart(CamelMain.java:68)
2025-07-08T09:46:18.1145173Z 	at org.apache.camel.support.service.BaseService.start(BaseService.java:123)
2025-07-08T09:46:18.1145660Z 	at org.apache.camel.quarkus.main.CamelMain.startEngine(CamelMain.java:110)
2025-07-08T09:46:18.1146394Z 	at org.apache.camel.quarkus.main.CamelMainRuntime.start(CamelMainRuntime.java:49)
2025-07-08T09:46:18.1146985Z 	at org.apache.camel.quarkus.core.CamelBootstrapRecorder.start(CamelBootstrapRecorder.java:47)
2025-07-08T09:46:18.1147603Z 	at io.quarkus.runner.recorded.CamelBootstrapProcessor$boot548544167.deploy_0(Unknown Source)
2025-07-08T09:46:18.1148284Z 	at io.quarkus.runner.recorded.CamelBootstrapProcessor$boot548544167.deploy(Unknown Source)
2025-07-08T09:46:18.1148675Z 	... 8 more
2025-07-08T09:46:18.1148967Z Caused by: java.lang.ClassNotFoundException: dev.langchain4j.model.Tokenizer
2025-07-08T09:46:18.1149501Z 	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
2025-07-08T09:46:18.1150092Z 	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
2025-07-08T09:46:18.1150591Z 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
2025-07-08T09:46:18.1151115Z 	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:576)
2025-07-08T09:46:18.1151762Z 	at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:523)
2025-07-08T09:46:18.1152199Z 	... 33 more

@aloubyansky
Copy link
Member Author

I'll have a look into the EasyRagCodestartTest failure

@aloubyansky
Copy link
Member Author

I'll have a look into the EasyRagCodestartTest failure

AFAIR, these tests are based on snapshots that are included as resources and they are probably missing in this test setup

@aloubyansky
Copy link
Member Author

The EasyRagCodestartTest will be fixed with inclusion of quarkusio/quarkus#48850
It could be disabled until then.

@gsmet
Copy link
Member

gsmet commented Jul 9, 2025

The Blaze Persistence issue is known and I pinged @beikov about it some time ago. He will address it at some point, I'm sure.

@ppalaga
Copy link
Collaborator

ppalaga commented Jul 9, 2025

@jamesnetherton reports that the Camel Quarkus issues are already fixed in CQ main branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add Quarkus Langchain4J to the Quarkus platform
3 participants