Skip to content

Quarkus + Langchain4j Dapr Workflows extension + Agent registry#1693

Open
salaboy wants to merge 10 commits intodapr:masterfrom
salaboy:1688-langchain4j
Open

Quarkus + Langchain4j Dapr Workflows extension + Agent registry#1693
salaboy wants to merge 10 commits intodapr:masterfrom
salaboy:1688-langchain4j

Conversation

@salaboy
Copy link
Collaborator

@salaboy salaboy commented Mar 10, 2026

Description

Initial implementation for Quarkus + Langchain4j extension for Dapr Workflows.

Issue reference

We strive to have all PR being opened based on an issue, where the problem or feature have been discussed prior to implementation.

Please reference the issue this PR will close: #1688

Checklist

Please make sure you've completed the relevant tasks for this PR, out of the following list:

  • Code compiles correctly
  • Created/updated tests
  • Extended the documentation

@salaboy salaboy requested review from a team as code owners March 10, 2026 14:48
@salaboy salaboy marked this pull request as draft March 10, 2026 14:49
@salaboy salaboy force-pushed the 1688-langchain4j branch 4 times, most recently from 590453f to 16f9092 Compare March 12, 2026 14:21
@salaboy salaboy marked this pull request as ready for review March 12, 2026 14:59
@salaboy salaboy changed the title [WIP - DO NOT MERGE] Quarkus + Langchain4j Dapr Workflows extension + Agent registry Quarkus + Langchain4j Dapr Workflows extension + Agent registry Mar 12, 2026
@salaboy
Copy link
Collaborator Author

salaboy commented Mar 17, 2026

@javier-aliaga @cicoyle @siri-varma @artur-ciocanu I will appreciate reviews on this PR

salaboy and others added 9 commits March 17, 2026 16:16
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: Javier Aliaga <javier@diagrid.io>
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
* Add baggage

Signed-off-by: siri-varma <siri.varma@outlook.com>

* Update sdk/src/test/java/io/dapr/client/DaprClientGrpcBaggageTest.java

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com>

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com>

* Remove empty tearDown method in test class

Removed empty tearDown method from DaprClientGrpcBaggageTest.

Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com>

* Refactor contextWrite calls to remove casting

Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com>

---------

Signed-off-by: siri-varma <siri.varma@outlook.com>
Signed-off-by: Siri Varma Vegiraju <siri.varma@outlook.com>
Co-authored-by: Cassie Coyle <cassie.i.coyle@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
Signed-off-by: salaboy <Salaboy@gmail.com>
@codecov
Copy link

codecov bot commented Mar 17, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.53%. Comparing base (8f304f6) to head (c216390).

Additional details and impacted files
@@             Coverage Diff              @@
##             master    #1693      +/-   ##
============================================
- Coverage     79.54%   79.53%   -0.02%     
- Complexity     2196     2197       +1     
============================================
  Files           238      238              
  Lines          6591     6591              
  Branches        732      732              
============================================
- Hits           5243     5242       -1     
- Misses          990      992       +2     
+ Partials        358      357       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Initial implementation of a Quarkus extension that integrates LangChain4j Agentic workflows with Dapr Workflows, plus an agent registry module and runnable examples, aligned with issue #1688.

Changes:

  • Adds a new quarkus/ multi-module build with runtime/deployment modules for Dapr Workflows–backed LangChain4j agent orchestration.
  • Introduces an agent registry module that auto-discovers @Agent methods and persists agent metadata into a Dapr state store.
  • Adds Quarkus examples and tests (including Dev Services/Testcontainers-based integration tests) plus supporting build/config updates.

Reviewed changes

Copilot reviewed 95 out of 95 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
spotbugs-exclude.xml Extends SpotBugs exclusions to io.quarkiverse.dapr.* packages.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/OrchestrationInputTest.java Unit tests for orchestration input record.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/InputRecordsTest.java Unit tests for activity input records.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/ActivitiesTest.java Unit tests for orchestration activities behavior.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/DaprWorkflowPlannerTest.java Unit tests for planner lifecycle and metadata extraction.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/DaprWorkflowAgentsBuilderTest.java Tests SPI discovery and builder wiring for agent services.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/DaprPlannerRegistryTest.java Tests planner registry operations.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/workflow/DaprAgentServiceUtilTest.java Tests workflow-safe name sanitization utility.
quarkus/runtime/src/test/java/io/quarkiverse/dapr/langchain4j/memory/KeyValueChatMemoryStoreTest.java Tests Dapr state-store-backed chat memory store.
quarkus/runtime/src/main/resources/META-INF/services/dev.langchain4j.agentic.workflow.WorkflowAgentsBuilder Registers WorkflowAgentsBuilder implementation via SPI.
quarkus/runtime/src/main/resources/META-INF/quarkus-extension.yaml Adds Quarkus extension descriptor metadata.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/activities/ExitConditionCheckActivity.java Adds Dapr activity for loop exit-condition evaluation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/activities/ConditionCheckActivity.java Adds Dapr activity for conditional-agent gating.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/activities/AgentExecutionActivity.java Adds bridging activity to enqueue agent execution and register per-run context.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/SequentialOrchestrationWorkflow.java Adds sequential orchestration workflow implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/ParallelOrchestrationWorkflow.java Adds parallel orchestration workflow implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/OrchestrationInput.java Adds shared orchestration input record.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/LoopOrchestrationWorkflow.java Adds loop orchestration workflow implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/ExitConditionCheckInput.java Adds activity input record for loop exit-condition checks.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/ConditionalOrchestrationWorkflow.java Adds conditional orchestration workflow implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/ConditionCheckInput.java Adds activity input record for conditional checks.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/orchestration/AgentExecInput.java Adds activity input record for agent execution bridge.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/WorkflowNameResolver.java Adds resolver for workflow registration names (annotation-aware).
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprWorkflowAgentsBuilder.java Adds CDI-based builder for Dapr-backed agent services.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprSequentialAgentService.java Adds Dapr-backed sequential agent service implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprPlannerRegistry.java Adds in-process static registry for planners.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprParallelAgentService.java Adds Dapr-backed parallel agent service implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprLoopAgentService.java Adds Dapr-backed loop agent service implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprConditionalAgentService.java Adds Dapr-backed conditional agent service implementation.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprAgentServiceUtil.java Adds shared utilities for workflow identifier safety.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/workflow/DaprAgentService.java Adds marker interface for Dapr-backed agent services.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/memory/KeyValueChatMemoryStore.java Adds Dapr state-store-backed LangChain4j ChatMemoryStore.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/workflow/AgentRunWorkflow.java Adds per-agent workflow to execute tool/LLM activities and maintain custom status.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/workflow/AgentRunOutput.java Adds aggregated workflow output record for observability.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/workflow/AgentRunInput.java Adds input record for per-agent workflow execution.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/workflow/AgentEvent.java Adds external-event record used to drive the per-agent workflow.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/activities/ToolCallOutput.java Adds tool-call activity output record.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/activities/ToolCallInput.java Adds tool-call activity input record.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/activities/ToolCallActivity.java Adds activity that executes intercepted @Tool calls.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/activities/LlmCallOutput.java Adds LLM-call activity output record.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/activities/LlmCallInput.java Adds LLM-call activity input record.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/activities/LlmCallActivity.java Adds activity that executes intercepted ChatModel calls.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprToolCallInterceptor.java Adds CDI interceptor to route @Tool calls via Dapr workflows.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprChatModelDecorator.java Adds decorator to route ChatModel.chat() via Dapr workflows for synthetic beans.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprAgentToolInterceptorBinding.java Adds interceptor binding annotation for tool interception.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprAgentRunRegistry.java Adds static registry for per-agent run contexts.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprAgentMethodInterceptor.java Adds interceptor to start per-agent workflow for non-synthetic CDI @Agent methods.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprAgentMetadataHolder.java Adds thread-local metadata holder for agent name/prompt templates.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprAgentInterceptorBinding.java Adds interceptor binding annotation for @Agent methods.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/DaprAgentContextHolder.java Adds thread-local context holder for agent run id routing.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/AgentRunLifecycleManager.java Adds request-scoped lifecycle manager for lazily started per-agent workflows.
quarkus/runtime/src/main/java/io/quarkiverse/dapr/langchain4j/agent/AgentRunContext.java Adds synchronization context for pending tool/LLM calls.
quarkus/runtime/pom.xml Introduces runtime module Maven config/deps for the extension.
quarkus/quarkus-agentic-dapr-agents-registry/src/test/resources/application.properties Configures registry tests with Dapr Dev Services and mock OpenAI settings.
quarkus/quarkus-agentic-dapr-agents-registry/src/test/java/io/quarkiverse/dapr/agents/registry/service/TestAgentBean.java Adds CDI bean implementing an agent interface for discovery tests.
quarkus/quarkus-agentic-dapr-agents-registry/src/test/java/io/quarkiverse/dapr/agents/registry/service/TestAgent.java Adds test agent interface with varied @Agent metadata.
quarkus/quarkus-agentic-dapr-agents-registry/src/test/java/io/quarkiverse/dapr/agents/registry/service/MockChatModel.java Adds mock chat model for registry integration tests.
quarkus/quarkus-agentic-dapr-agents-registry/src/test/java/io/quarkiverse/dapr/agents/registry/service/AgentRegistryTest.java Adds unit tests for reflection-based agent scanning.
quarkus/quarkus-agentic-dapr-agents-registry/src/test/java/io/quarkiverse/dapr/agents/registry/service/AgentRegistryDevServicesTest.java Adds Dev Services integration tests validating state-store registration.
quarkus/quarkus-agentic-dapr-agents-registry/src/main/resources/META-INF/beans.xml Enables bean discovery for registry module.
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/service/AgentRegistry.java Implements startup discovery and state-store registration of agents.
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/ToolMetadata.java Adds registry model types (tool metadata).
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/RegistryMetadata.java Adds registry model types (registry metadata).
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/PubSubMetadata.java Adds registry model types (pub/sub metadata).
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/MemoryMetadata.java Adds registry model types (memory metadata).
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/LlmMetadata.java Adds registry model types (LLM metadata).
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/AgentMetadataSchema.java Adds schema wrapper for agent registration payload.
quarkus/quarkus-agentic-dapr-agents-registry/src/main/java/io/quarkiverse/dapr/agents/registry/model/AgentMetadata.java Adds agent metadata payload model.
quarkus/quarkus-agentic-dapr-agents-registry/pom.xml Adds registry module Maven config/deps.
quarkus/pom.xml Adds Quarkus parent/module structure and dependency management overrides.
quarkus/examples/src/test/resources/application.properties Enables Dapr Dev Services + OpenAI test config for examples.
quarkus/examples/src/test/java/io/quarkiverse/dapr/examples/StoryResourceTest.java Adds integration tests for /story endpoint.
quarkus/examples/src/test/java/io/quarkiverse/dapr/examples/ParallelResourceTest.java Adds integration tests for /parallel endpoint.
quarkus/examples/src/test/java/io/quarkiverse/dapr/examples/MockChatModel.java Adds test mock model for examples.
quarkus/examples/src/test/java/io/quarkiverse/dapr/examples/DockerAvailableCondition.java Adds conditional test disabling when Docker isn’t available.
quarkus/examples/src/test/java/io/quarkiverse/dapr/examples/DaprWorkflowClientTest.java Verifies dev services provides DaprWorkflowClient.
quarkus/examples/src/main/resources/application.properties Adds example runtime config (Dev Services, OpenTelemetry, LangChain4j tracing).
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/StyleEditor.java Adds example sub-agent interface.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/StoryResource.java Adds example REST endpoint for sequential workflow.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/StoryCreator.java Adds example composite agent using @SequenceAgent.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/ResearchWriter.java Adds example agent that uses tools (ToolBox).
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/ResearchTools.java Adds example tool CDI bean with @Tool methods.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/ResearchResource.java Adds example REST endpoint for tool-routing workflow.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/ParallelStatus.java Adds example DTO for parallel endpoint response.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/ParallelResource.java Adds example REST endpoint for parallel workflow.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/ParallelCreator.java Adds example composite agent using @ParallelAgent.
quarkus/examples/src/main/java/io/quarkiverse/dapr/examples/CreativeWriter.java Adds example sub-agent interface.
quarkus/examples/pom.xml Adds examples module Maven config/deps.
quarkus/deployment/pom.xml Adds Quarkus deployment module Maven config/deps.
pom.xml Adds quarkus module, pins durabletask proto URL, updates compiler settings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

You can also share your feedback on Copilot code review. Take the survey.

Comment on lines +41 to +43
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.release>17</maven.compiler.release>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@salaboy I agree with this comment, If we want to bump the java version probably it deserve it own PR for it

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.

Provide Support for Quarkus extensions and Langchain4j

4 participants