Quarkus + Langchain4j Dapr Workflows extension + Agent registry#1693
Quarkus + Langchain4j Dapr Workflows extension + Agent registry#1693salaboy wants to merge 10 commits intodapr:masterfrom
Conversation
ec48d2c to
1cffa21
Compare
590453f to
16f9092
Compare
|
@javier-aliaga @cicoyle @siri-varma @artur-ciocanu I will appreciate reviews on this PR |
8647113 to
bc0dd35
Compare
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>
4d58a77 to
0777814
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. 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. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
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
@Agentmethods 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.
| <maven.compiler.source>17</maven.compiler.source> | ||
| <maven.compiler.target>17</maven.compiler.target> | ||
| <maven.compiler.release>17</maven.compiler.release> |
There was a problem hiding this comment.
@salaboy I agree with this comment, If we want to bump the java version probably it deserve it own PR for it
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: