This project uses Quarkus, the Supersonic Subatomic Java Framework, with LangChain4j for AI integration using local Ollama, and Vaadin for the web UI.
If you want to learn more about Quarkus, please visit its website: https://quarkus.io/.
This application includes an AI service powered by LangChain4j and Ollama that tells you random cool facts about Java. It features a beautiful Vaadin web interface to interact with the service.
Make sure you have Ollama running locally. Download it from https://ollama.ai and start it:
ollama serveThen pull a model (the default is qwen2.5-coder):
ollama pull qwen2.5-coderEdit src/main/resources/application.properties if you need to customize the Ollama connection:
ollama.base-url=http://localhost:11434
ollama.model.name=qwen2.5-coderThe application features a beautiful Vaadin web interface:
- Open your browser and navigate to: http://localhost:8080
- Click the "Get Random Java Fact" button to fetch a new fact
- The fact will be displayed in a centered, styled div
curl http://localhost:8080/java-ai/cool-factEach call returns a different random fact about Java!
You can run your application in dev mode that enables live coding using:
./mvnw quarkus:devNOTE: Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8080/q/dev/.
The application includes comprehensive observability tools to debug what's being sent to the AI model:
View real-time metrics at:
http://localhost:8080/q/metrics
Check application health at:
http://localhost:8080/q/health
When running in dev mode, detailed logs show:
- Model initialization: Ollama connection details
- Prompts sent: Full prompts being sent to the model
- Responses received: Complete model responses
- Errors: Detailed error traces with context
Check console output for debug logs like:
=== PROMPT SENT TO MODEL ===
Prompt: Tell me one random cool fact about Java
============================
=== RESPONSE FROM MODEL ===
Response: [AI response here]
===========================
To adjust logging levels, edit src/main/resources/application.properties:
quarkus.log.category."org.acme".level=DEBUG
quarkus.log.category."dev.langchain4j".level=DEBUGThe application can be packaged using:
./mvnw packageIt produces the quarkus-run.jar file in the target/quarkus-app/ directory.
Be aware that it’s not an über-jar as the dependencies are copied into the target/quarkus-app/lib/ directory.
The application is now runnable using java -jar target/quarkus-app/quarkus-run.jar.
If you want to build an über-jar, execute the following command:
./mvnw package -Dquarkus.package.jar.type=uber-jarThe application, packaged as an über-jar, is now runnable using java -jar target/*-runner.jar.
You can create a native executable using:
./mvnw package -DnativeOr, if you don't have GraalVM installed, you can run the native executable build in a container using:
./mvnw package -Dnative -Dquarkus.native.container-build=trueYou can then execute your native executable with: ./target/langchain-poc-1.0.0-SNAPSHOT-runner
If you want to learn more about building native executables, please consult https://quarkus.io/guides/maven-tooling.
Easily start your REST Web Services