CtrlK
BlogDocsLog inGet started
Tessl Logo

gamussa/langchain4j-agentic

Build and demo Java AI agent systems with langchain4j-agentic: workflow patterns, supervisor, custom Planner strategies (incl. the flagship typed-verdict / CriticResult-style critic pattern), plus MCP tools, A2A remote agents, build setup, and conference-demo storylines. Pinned to 1.15.0 / 1.15.0-beta25.

84

4.76x
Quality

89%

Does it follow best practices?

Impact

100%

4.76x

Average score across 2 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-1/

{
  "context": "Tests whether the agent correctly configures parallel and loop workflow patterns in langchain4j-agentic: explicit Executor for concurrency, no ChatMemory on parallelMapper sub-agents, bounded loops with maxIterations and exitCondition, maxSequentialToolsInvocations on tool-using agents, and observability via AgentMonitor.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "No ChatMemory on parallel sub-agents",
      "description": "Sub-agents used inside a parallelMapperBuilder (the per-item fan-out) do NOT have .chatMemory(...) or @ChatMemorySupplier configured — they are stateless by construction",
      "max_score": 15
    },
    {
      "name": "Explicit Executor provided",
      "description": "The parallelBuilder or parallelMapperBuilder call includes an explicit .executor(...) argument (e.g. Executors.newFixedThreadPool(N) or newVirtualThreadPerTaskExecutor()) — does NOT rely solely on an internal default pool",
      "max_score": 15
    },
    {
      "name": "loopBuilder sets maxIterations",
      "description": "The iterative refinement loop is built with loopBuilder and includes a .maxIterations(N) call to bound the number of retry cycles",
      "max_score": 15
    },
    {
      "name": "loopBuilder has exitCondition",
      "description": "The loopBuilder includes an .exitCondition(...) predicate over the AgenticScope (e.g. checking the score against a threshold) in addition to the maxIterations bound",
      "max_score": 15
    },
    {
      "name": "parallelMapper fan-out over the batch",
      "description": "The batch classification/scoring stage uses parallelMapperBuilder to fan the SAME agent out over the collection of articles (naming the collection via itemsProvider, or relying on a single iterable argument) — it does NOT hand-roll a manual loop or a fixed set of distinct parallel sub-agents",
      "max_score": 15
    },
    {
      "name": "AgentMonitor and HtmlReportGenerator",
      "description": "An AgentMonitor is registered on the top-level workflow via .listener(monitor) and HtmlReportGenerator.generateReport(monitor, path) is called after the pipeline run",
      "max_score": 15
    },
    {
      "name": "outputKey not outputName",
      "description": "All agent builders and @Agent annotations use 'outputKey' to publish results — the deprecated 'outputName' does not appear anywhere in the source files",
      "max_score": 10
    }
  ]
}

README.md

tile.json