|
1 | 1 | --- |
2 | 2 | title: "AI Framework Adapters" |
3 | | -description: "Plugging Spring AI, LangChain4j, Google ADK, and Embabel into Atmosphere's streaming infrastructure" |
| 3 | +description: "Plugging Spring AI, LangChain4j, Google ADK, Embabel, Koog, Semantic Kernel, AgentScope, and Spring AI Alibaba into Atmosphere's streaming infrastructure" |
4 | 4 | sidebar: |
5 | 5 | order: 11 |
6 | 6 | --- |
@@ -46,7 +46,7 @@ var request = ChatCompletionRequest.builder(settings.model()) |
46 | 46 | settings.client().streamChatCompletion(request, session); |
47 | 47 | ``` |
48 | 48 |
|
49 | | -The built-in client is what powers `session.stream(message)` inside `@AiEndpoint`. If you need framework-specific features (Spring AI advisors, LangChain4j tool loops, ADK agent orchestration, Embabel agent planning), use one of the adapter modules below. |
| 49 | +The built-in client is what powers `session.stream(message)` inside `@AiEndpoint`. If you need framework-specific features (Spring AI advisors, LangChain4j tool loops, ADK agent orchestration, Embabel agent planning, Koog graph strategies, Semantic Kernel kernel hooks, AgentScope ReAct agents, or Spring AI Alibaba runnable configs), use one of the adapter modules below. |
50 | 50 |
|
51 | 51 | ## Runtimes |
52 | 52 |
|
@@ -80,18 +80,25 @@ This table mirrors the exact `Set<AiCapability>` each runtime's `capabilities()` |
80 | 80 | | `CONVERSATION_MEMORY` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
81 | 81 | | `PER_REQUEST_RETRY` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
82 | 82 | | `TOKEN_USAGE` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | |
| 83 | +| `BUDGET_ENFORCEMENT` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
| 84 | +| `CONFIDENCE_SCORES` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
83 | 85 | | `CANCELLATION` | — | — | — | — | — | ✅ | — | ✅ | — | |
| 86 | +| `PASSIVATION` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
84 | 87 | | `VISION` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | — | |
85 | 88 | | `MULTI_MODAL` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | — | — | — | |
86 | 89 | | `AUDIO` | ✅ | ✅ | ✅ | ✅ | — | ✅ | — | — | — | |
87 | 90 | | `PROMPT_CACHING` | ✅ | ✅ | ✅ | ✅ | — | ✅ | — | — | — | |
88 | 91 | | `AGENT_ORCHESTRATION` | — | — | — | ✅ | ✅ | ✅ | — | — | — | |
89 | 92 | | `TOOL_CALL_DELTA` | ✅ | — | — | — | — | — | — | — | — | |
| 93 | +| `MODEL_ENUMERATION` | — | — | — | — | — | — | — | — | — | |
| 94 | +| `MULTI_AGENT_HANDOFF` | — | — | — | — | — | — | — | — | — | |
90 | 95 |
|
91 | 96 | **Legend:** |
92 | 97 | - ✅ Declared in `capabilities()` and honored at runtime |
93 | 98 | - — Not declared. Either the framework's native API does not expose the feature, or the bridge has not threaded it through yet. |
94 | 99 |
|
| 100 | +The full `AiCapability` enum has 20 values. `MODEL_ENUMERATION` and `MULTI_AGENT_HANDOFF` are forward-looking SPI slots — the enum entries exist so callers can probe for them, but no runtime declares them today. `MULTI_AGENT_HANDOFF` is currently surfaced through the coordinator/handoff path (`session.handoff()`, `AiEvent.Handoff`) rather than a per-runtime capability flag. |
| 101 | + |
95 | 102 | ### Why the baseline is so high |
96 | 103 |
|
97 | 104 | The first three rows plus `CONVERSATION_MEMORY` and `PER_REQUEST_RETRY` are universal across all nine runtimes because `AbstractAgentRuntime` and the pipeline layer implement them once and every runtime that extends or delegates to them inherits the behavior. The framework builds the default, the adapter only plugs in where it differs. `TOOL_CALLING` / `TOOL_APPROVAL` reach the seven adapters that have a tool-call surface in their underlying SDK; `AgentScope` and `Spring AI Alibaba` lack a native dispatch loop today (tools must be invoked manually). `TOKEN_USAGE` reaches eight of nine — `Spring AI Alibaba` has no usage record on `ReactAgent.call()` in `1.1.2.2`. |
|
0 commit comments