{"ref":"capability:llm-integration","page":"/capabilities/llm-integration","json":"/capabilities/llm-integration.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"llm-integration","name":"LLM integration","domain":"ai-and-agents","ecosystems":["cap","ui5","btp","abap"],"universal":true,"description":"Calling a language model from application code with the tenant, destination and credential handling already solved instead using an SDK call with a hand-rolled key.","short":"Calling a language model with tenant and credential handling solved","core_coverage":{"state":"core-and-community","assessed_at":"2026-10-15","what_core_does":"SAP ships the call as packages rather than in the runtime: [@cap-js/ai](artifact:cap-js-ai) embeds [SAP AI Core](artifact:btp-ai-core) as a standard CAP service with automatic service-binding resolution and tenant-aware resource groups and deployments, and puts SAP RPT-1 recommendations on annotated value-help fields in draft-enabled Fiori UIs. The call itself is the SAP Cloud SDK for AI — [@sap-ai-sdk/foundation-models](artifact:sap-ai-sdk-foundation-models) against a deployment, [@sap-ai-sdk/orchestration](artifact:sap-ai-sdk-orchestration) through the orchestration service, each with a `stream()` method over server-sent events — and [cap-java/cds-ai](artifact:cap-java-cds-ai) is the Java bridge, which capire's plugin list calls alpha.","where_it_stops":"It stops at models reached through SAP AI Core: every package above is a client of that service, and `aicore` is the kind `cds.requires.llm` defaults to in `production` and `hybrid`. The other kinds capire documents are for local runs, `auto` and `mock` on [Node.js](external:nodejs) and `ollama` and `mocked` on Java, and the page that configures the Java one marks chat model configuration alpha.","community_adds":"[@saptarishi/cds-plugin-llm](artifact:saptarishi-cds-plugin-llm) puts many model providers behind one CAP service kind, so which backend a handler calls is a profile rather than a code change, and [cap-llm-plugin](artifact:cap-llm-plugin) anonymises the sensitive fields in [SAP HANA Cloud](artifact:btp-hana-cloud) before the prompt leaves. [@geertjanklaps/cds-toon-ai-protocol-adapter](artifact:geertjanklaps-cds-toon-ai-protocol-adapter) leaves the call alone and changes the wire format instead, so the same rows cost fewer tokens to send. On ABAP, clients for other vendors' APIs, such as [Microsoft AI SDK for SAP](artifact:microsoft-aisdkforsapabap) for Azure OpenAI and [llm_client](artifact:abap-ai-llm-client) across chat-completion providers, reach models the SAP library does not.","sources":[{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP plugins — AI","checked":"2026-10-15","quote":"Additionally, the AI Plugin embeds SAP AI Core as a standard CAP service following the Calesi pattern, giving you automatic service binding resolution along with tenant-aware access including managed resource groups and deployments."},{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP plugins — AI, recommendations","checked":"2026-10-15","quote":"The AI plugin provides out-of-the-box UI field recommendations powered by SAP RPT-1. It automatically detects fields with `@Common.ValueList` or `@cds.odata.valuelist` annotations and provides intelligent recommendations in SAP Fiori draft-enabled UIs without requiring custom handlers."},{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP plugins — AI, Java","checked":"2026-10-15","quote":"The Java version of this plugin is currently in alpha."},{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript)","checked":"2026-10-15","quote":"The `OrchestrationClient` supports streaming responses for chat completion requests based on the Server-sent events standard."},{"url":"https://sap.github.io/ai-sdk/docs/js/foundation-models/openai/chat-completion","title":"Chat Completion — SAP Cloud SDK for AI (JavaScript), foundation models","checked":"2026-10-15","quote":"The `AzureOpenAiChatClient` supports streaming response for chat completion requests based on the Server-sent events standard."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm — capire","checked":"2026-10-15","quote":"The default for `production` and `hybrid`, connects to SAP AI Core"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm auto — capire","checked":"2026-10-15","quote":"The default for `development`, using local Claude or OpenCode configuration"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm mock — capire","checked":"2026-10-15","quote":"A pure mock for `development`, provides dummy responses when called"},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, chat model kinds","checked":"2026-10-15","quote":"The model provider: `aicore`, `ollama`, or `mocked`."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, Chat Model Configuration","checked":"2026-10-15","quote":"Chat Model Configuration <Alpha />"}],"relationship":"narrow-by-design"},"history":[{"date":"2026-08-31","field":"core_coverage.state","from":"left-open-on-purpose","to":"core-and-community","reason":"States renamed to describe who is present rather than to interpret intent. left-open-on-purpose asserted a motive; core-and-community states a fact, with relationship carrying the intent separately."},{"date":"2026-09-10","field":"ecosystems","from":"cap","to":"cap, ui5","reason":"Artifacts that answer this concern sat behind the UI5 door with no tile to appear under, so browse counted them and rendered nothing. The concern is one a UI5 developer actually decides there, which is the test for opening a door rather than trimming a serves claim."},{"date":"2026-09-14","field":"ecosystems","from":"cap, ui5","to":"cap, ui5, btp, abap","reason":"SAP AI Core entered as a BTP service and the ABAP AI SDK as a platform library, and the five SAP AI SDK packages already on the CAP door had no service behind them to point at."},{"date":"2026-09-14","field":"coverage_by_flavor.abap-cloud","from":null,"to":"core-only","reason":"The one ABAP-door provider, sap-abap-ai-sdk, carries no flavors field, so nothing on the artifact itself states abap-cloud. SAP's own abap-cheat-sheets chapter files the SDK under Generative AI in ABAP Cloud and describes its classes as released, which is what makes a call to it fit inside a RAP, ADT-only object; that source stands in for the missing flavors statement."},{"date":"2026-09-14","field":"coverage_by_flavor.web-components","from":null,"to":"core-only","reason":"No artifact behind the UI5 door provides this capability at all, let alone one stating web-components, so the corpus's own provides edges are silent. @ui5/webcomponents-ai is SAP's documented answer at exactly this layer, presentation-only and framework-independent, which is what makes core-only the honest reading rather than unmapped: the package exists, the atlas just has no artifact for it yet."},{"date":"2026-09-14","field":"framing_by_flavor.web-components","from":null,"to":"the concern sits entirely in the component, with no CAP plugin's server half attached","reason":"The freestyle door's framing describes a call split across a CDS plugin and a UI5 control library; Web Components have no such split, since @ui5/webcomponents-ai ships presentation controls only and nothing server-side, so the paragraph needed to say a different thing rather than borrow the door's."},{"date":"2026-09-14","field":"coverage_by_ecosystem.ui5","from":"community-only","to":"core-only","reason":"@ui5/webcomponents provides this capability through its @ui5/webcomponents-ai package, and its own ecosystem is ui5, so the door has an SAP-official provider and community-only no longer holds. Its only other provider behind this door, ui5-cap-ai-features, lives in CAP and serves UI5, so it is listed here and not counted: the reading is core-only. No relationship is recorded, because no source states why the package stops at the surface."},{"date":"2026-09-14","field":"coverage_by_flavor.web-components","from":"core-only, resting on documentation with no artifact","to":"core-only, resting on artifact:ui5-webcomponents","reason":"@ui5/webcomponents entered the atlas and provides this capability through its @ui5/webcomponents-ai package, so the sentence saying no provider was mapped and the note saying no artifact represented the package are no longer true. The framing links the package's artifact in place of its documentation page."},{"date":"2026-09-14","field":"description","from":"Calling a language model from a CAP service with the tenant, destination and credential handling already solved — rather than an SDK call with a hand-rolled key.","to":"Calling a language model from application code with the tenant, destination and credential handling already solved — rather than an SDK call with a hand-rolled key.","reason":"The description named a CAP service, which is false on the UI5, BTP and ABAP doors this capability is in. Only the subject of the call changed."},{"date":"2026-09-20","field":"core_coverage.where_it_stops","from":"It stops at SAP-hosted models reached through AI Core. Other providers, prompt management and evaluation are yours.","to":"It stops at SAP-hosted models reached through AI Core: aicore is the default kind for production and hybrid, and the other kinds capire documents, auto and mock on [Node.js](external:nodejs) and ollama and mocked on Java, are for local runs. Other providers, prompt management and evaluation are yours.","reason":"The boundary is kept and made checkable against capire's new AI pages: aicore is documented as the default kind for production and hybrid, and every other documented kind (auto and mock on Node.js, ollama and mocked on Java) is for local runs."},{"date":"2026-10-14","field":"coverage_by_flavor.web-components.where_it_stops","from":"the package \"is available since 2.0\" but is \"under active development and considered experimental\" with component APIs \"subject to change\"","to":"the package is \"under development and considered experimental\", its component APIs are \"subject to change\", and it supports the Horizon themes only","reason":"The PromptInput page no longer carries the sentence this rested on. Read again on 2026-10-14 it states \"The @ui5/webcomponents-ai package is under development and considered experimental - components' APIs are subject to change. Furthermore, the package supports Horizon themes only\", with no version marker in it. The since-2.0 claim had no second source, so it goes rather than stand unsourced; the experimental state and the Horizon-only limit stay, in the words the page now uses, which are the words coverage_by_ecosystem.ui5 already quoted. The flavor's own assessment of who provides it was not redone, so assessed_at stands."},{"date":"2026-10-15","field":"core_coverage.where_it_stops","from":"It stops at SAP-hosted models reached through AI Core: aicore is the default kind for production and hybrid, and the other kinds capire documents, auto and mock on Node.js and ollama and mocked on Java, are for local runs. Other providers, prompt management and evaluation are yours.","to":"It stops at models reached through SAP AI Core: every package above is a client of that service, and aicore is the kind cds.requires.llm defaults to in production and hybrid. The other kinds capire documents are for local runs, auto and mock on Node.js and ollama and mocked on Java, and the page that configures the Java one marks chat model configuration alpha.","reason":"The closing sentence was wrong on two counts. Prompt management is not the reader's: the orchestration service's promptTemplating module is the one module every orchestration call configures, and @sap-ai-sdk/prompt-registry is SAP's client for the registry, so both are SAP's own answers and both carry provides edges to capability:prompt-management. Evaluation was asserted with no source read for it, so it goes rather than stand unsourced. The AI Core boundary, which is what a reader comes to this sentence for, is kept and attributed: it is the packages that are clients of the service, and the kinds belong to the agent configuration, which capire marks alpha on the Java side."},{"date":"2026-10-15","field":"core_coverage.what_core_does","from":"AI Core exposed as a regular CAP service, and out-of-the-box value-help recommendations.","to":"SAP ships the call as packages rather than in the runtime: @cap-js/ai embeds SAP AI Core as a standard CAP service, the SAP Cloud SDK for AI makes the call itself, and cap-java/cds-ai is the Java bridge capire's plugin list calls alpha.","reason":"The sentence named one plugin's two features and left out the package that makes the call and the Java answer, so a reader could not tell from it what SAP actually ships here. Neither runtime core carries a provides edge to this capability and capire's AI guides name embeddings, MCP services and agents rather than a model call, which is why the first clause says packages rather than runtime."},{"date":"2026-10-15","field":"core_coverage.community_adds","from":null,"to":"@saptarishi/cds-plugin-llm, cap-llm-plugin and @geertjanklaps/cds-toon-ai-protocol-adapter, and what each adds past the AI Core boundary","reason":"The panel named no community option, so the three readings above the options list said who was present without saying what they answer. Providers outside SAP AI Core, anonymisation before the prompt leaves, and the wire format are the three things the SAP packages read here do not do."},{"date":"2026-10-15","field":"coverage_by_flavor.node","from":null,"to":"core-and-community","reason":"The door had no flavor assessment at all, so both CAP flavors were derived from whichever options state them, and the Java answer read like the Node.js one. On Node.js SAP ships the plugin, the SDK packages and the agent plugin's LLM connection, and every community option on this door is a Node.js package or a cds-plugin, so both are present."},{"date":"2026-10-15","field":"coverage_by_flavor.java","from":null,"to":"core-only","reason":"Every provider this capability holds that states Java is SAP's: cap-java/cds-ai, and the agent adapter capire documents in java/ai. The community options are cds-plugins and npm packages, which the flavor definition says do not load here, so nothing community is mapped behind this flavor. That is a reading of the corpus and not a statement that nothing exists."},{"date":"2026-10-15","field":"framing_by_flavor.java","from":null,"to":"a Maven dependency rather than a cds-plugin, with the chat model configured on the agent adapter and a local model reached through LangChain4j","reason":"Java fell back to the node paragraph, which describes a plugin registered under cds.requires.llm. CAP Java reaches a model through a Maven module and an agent adapter dependency, and a local model through LangChain4j's Ollama integration, so the paragraph had to say a different thing rather than borrow the flavor beside it."},{"date":"2026-10-15","field":"facets","from":null,"to":"model_access, response_streaming, both on the CAP door","reason":"Two questions the options here answer differently and the page could not show. Which models an option reaches is the first fact a reader needs, because all but one of the CAP options are clients of SAP AI Core; whether the response can be streamed decides whether a chat surface is possible at all. Both are scoped to cap: the ABAP, UI5 and BTP options were not read for them in this pass."},{"date":"2026-10-26","field":"coverage_by_ecosystem.ui5.state, coverage_by_ecosystem.ui5.note, coverage_by_ecosystem.ui5.community_adds","from":"core-only; note: \"[ui5-cap-ai-features] pairs UI5 controls with the call, but it lives in CAP and serves UI5, so it is listed behind this door and not counted into its assessment. Nothing that states SAPUI5's own freestyle or Fiori elements controls for this concern has been checked.\"","to":"core-and-community; community_adds names ui5-cap-ai-features and the chat reference application","reason":"Reassessed against the graph (check:capabilities): the UI5 door's community providers are CAP-hosted artifacts that list ui5 in serves_ecosystems, which counts a presence for the door. The note explained a state the providers now contradict and carried an absence claim about what was checked, so community_adds replaces it."},{"date":"2026-10-26","field":"coverage_by_ecosystem.btp.note","from":"Every provider behind this door is SAP's, so core-only is a assessment of the corpus rather than a quote from the core.","to":"(removed)","reason":"Reassessed against the graph (check:capabilities): the note was a claim about who provides the capability on this door, which moves with the corpus, and it restated the state the page draws. The state is unchanged."},{"date":"2026-10-26","field":"coverage_by_ecosystem.abap.state, coverage_by_ecosystem.abap.note, coverage_by_ecosystem.abap.community_adds","from":"core-only; note: \"One provider and it is SAP's, so core-only is a assessment of the corpus rather than a quote from the core.\"","to":"core-and-community; community_adds names the vendor and provider-neutral ABAP clients","reason":"Reassessed against the graph (check:capabilities): the ABAP door now has providers of other origins, among them microsoft-aisdkforsapabap, abap-ai-llm-client, oisee-zllm and abap-agent-runtime. The note was a provider count that no longer holds."},{"date":"2026-10-26","field":"core_coverage.community_adds","from":"puts eleven providers behind one CAP service kind ... (CAP community options only)","to":"puts many model providers behind one CAP service kind ... plus a sentence on ABAP clients for other vendors' APIs","reason":"Reassessed against the graph (check:capabilities): removed the count of providers and added the kind of thing the ABAP community providers add, since the cross-ecosystem panel named only CAP options."},{"date":"2026-10-26","field":"coverage_by_flavor.node.community_adds","from":"registers eleven provider kinds under the same cds.requires.llm ...","to":"registers many provider kinds under the same cds.requires.llm ...","reason":"Reassessed against the graph (check:capabilities): removed a count of providers from the prose."},{"date":"2026-10-26","field":"coverage_by_flavor.java.note","from":"Every provider mapped behind this flavor is SAP's, so core-only is a assessment of the corpus rather than a quote from the core.","to":"(removed)","reason":"Reassessed against the graph (check:capabilities): the note claimed who provides the capability behind this flavor, which moves with the corpus. The flavor state is unchanged."}],"changed_in":[{"version":"@cap-js/ai 1.0.0","date":"2026-04-28","what_changed":"The core gained a standalone AI plugin. Before it, reaching SAP AI Core from a CAP service meant calling its API directly and handling auth and deployments yourself; after it, @cap-js/ai provides a standard AICore CAP service with automatic service-binding resolution and per-tenant resource-group and deployment management, plus out-of-the-box SAP RPT-1 recommendations on value-help fields.","invalidates":"Guidance that describes reaching SAP AI Core from CAP as something you wire up yourself against the raw AI Core API. That was the only approach before the plugin shipped in April 2026.","source":{"url":"https://github.com/cap-js/ai/releases/tag/v1.0.0","title":"cap-js/ai — Release v1.0.0","checked":"2026-09-08","quote":"Provide a CAP `AICore` service, via which SAP AI Core artefacts can be queried"},"applies_to":{"ecosystems":["cap"]}}],"coverage_by_ecosystem":{"ui5":{"state":"core-and-community","assessed_at":"2026-09-14","relationship":"unassessed","what_core_does":"[@ui5/webcomponents](artifact:ui5-webcomponents) ships the interaction half in its `@ui5/webcomponents-ai` package: an AI button, an input and a text area, and `ui5-ai-prompt-input`, which lets a user \"write custom instructions in natural language, so that AI is guided to generate content tailored to user needs\".","where_it_stops":"At the surface: the components render and collect input and call no model, and the package is experimental and supports the Horizon themes only. The call belongs to whatever backend the application runs.","community_adds":"The call and the control arrive together: [ui5-cap-ai-features](artifact:lemaiwo-ui5-cap-ai-features) pairs UI5 controls with a CDS plugin, and [cap-ui5-gpt-chat](artifact:mikezaschka-cap-ui5-gpt-chat) is a whole chat application on a UI5 front end. Both live in CAP and serve UI5.","sources":[{"url":"https://github.com/UI5/webcomponents/blob/main/packages/ai/README.md","title":"UI5/webcomponents — packages/ai README","checked":"2026-09-14","quote":"Provides web components implementing AI-related visual and interaction."},{"url":"https://ui5.github.io/webcomponents/components/ai/PromptInput/","title":"PromptInput | UI5 Web Components","checked":"2026-10-14","quote":"The @ui5/webcomponents-ai package is under development and considered experimental - components' APIs are subject to change. Furthermore, the package supports Horizon themes only."}]},"btp":{"state":"core-only","assessed_at":"2026-09-14","what_core_does":"[SAP AI Core](artifact:btp-ai-core) is the service the calls go to: the Generative AI Hub inside it gives access to the models, and its orchestration service puts one harmonised API in front of them, so a change of model is configuration rather than a client change.","where_it_stops":"At the service boundary. Binding it, choosing a resource group and a deployment, and paying for tokens are the platform's; what the application does with an answer is the application's. [SAP AI Launchpad](artifact:btp-ai-launchpad) is the UI over the same deployments, not a second route to the models.","sources":[{"url":"https://btp-ai-bp.docs.sap/docs/technology/sap-ai-launchpad","title":"SAP AI Launchpad — SAP BTP AI Best Practices, Technologies","checked":"2026-09-14","quote":"the harmonized API allows you to use different foundation models without changing the client code"},{"url":"https://btp-ai-bp.docs.sap/docs/technology/sap-ai-core","title":"SAP AI Core — SAP BTP AI Best Practices, Technologies","checked":"2026-09-14","quote":"Access generative AI capabilities and prompt lifecycle management via the generative AI hub."}]},"abap":{"state":"core-and-community","assessed_at":"2026-09-14","relationship":"unassessed","what_core_does":"The [ABAP AI SDK](artifact:sap-abap-ai-sdk), powered by Intelligent Scenario Lifecycle Management, is SAP's library for calling a model from ABAP code, listed as available for SAP BTP ABAP environment, SAP S/4HANA Cloud Public Edition, SAP S/4HANA Cloud Private Edition and SAP S/4HANA.","where_it_stops":"At the connection. The models sit in the Generative AI Hub on BTP and the SDK reaches them through ISLM's configuration, so an ABAP system without that connection has the library and nothing to call.","community_adds":"Clients that call a vendor's or a self-hosted model directly from ABAP, without the Generative AI Hub: [Microsoft AI SDK for SAP](artifact:microsoft-aisdkforsapabap) for Azure OpenAI and OpenAI, [llm_client](artifact:abap-ai-llm-client) as one interface over chat-completion APIs, and [abap_btocs_ollama](artifact:b-tocs-abap-btocs-ollama) for Ollama. [zllm](artifact:oisee-zllm) chains and caches calls, and [abap-agent-runtime](artifact:abap2ui5-addons-abap-agent-runtime) runs the other way, serving MCP from inside the system.","sources":[{"url":"https://help.sap.com/docs/abap-ai/generative-ai-in-abap-cloud/availability","title":"Availability — AI in ABAP Cloud, SAP Help Portal","checked":"2026-09-14","quote":"ABAP AI SDK powered by Intelligent Scenario Lifecycle Management"},{"url":"https://community.sap.com/t5/technology-blog-posts-by-sap/your-2026-roadmap-to-getting-started-with-abap-ai-and-abap-1/ba-p/14312060","title":"Your 2026 Roadmap to Getting Started with ABAP AI and ABAP-1 — SAP Community, Jan Matthes, 2026-01-21","checked":"2026-09-14","quote":"The ABAP AI SDK is our reuse library that enables you to integrate Large Language Models (LLMs) and generative AI features directly into your SAP business applications with ABAP."}]}},"framing_by_ecosystem":{"ui5":{"description":"The call to a model belongs in the service, and the UI5 side is where its output meets a user. [ui5-cap-ai-features](artifact:lemaiwo-ui5-cap-ai-features) ships both halves — a CDS plugin and a UI5 control library — and [its demo](artifact:lemaiwo-ui5-ai-features-demo) proves the package is enough on its own; [cap-ui5-gpt-chat](artifact:mikezaschka-cap-ui5-gpt-chat) is a whole chat application as a reference."},"btp":{"description":"On this door the concern is the service itself: which models the Generative AI Hub offers, the orchestration deployment a call goes through, and the modules that run around the call, templating, masking, filtering and grounding. [SAP AI Core](artifact:btp-ai-core) is the entry; the SDKs on the CAP door are its clients."},"abap":{"description":"In ABAP the call is a library call inside the application: the [ABAP AI SDK](artifact:sap-abap-ai-sdk) reaches the Generative AI Hub through Intelligent Scenario Lifecycle Management, and the model is configured there rather than in code. It is a different thing from [SAP Joule for Developers, ABAP AI capabilities](artifact:sap-joule-for-developers), which is the developer's assistant and not the application's."}},"coverage_by_flavor":{"node":{"state":"core-and-community","assessed_at":"2026-10-15","relationship":"narrow-by-design","what_core_does":"[@cap-js/ai](artifact:cap-js-ai) is the plugin: it embeds [SAP AI Core](artifact:btp-ai-core) as a standard CAP service with automatic service-binding resolution and tenant-aware resource groups and deployments, and detects `@Common.ValueList` and `@cds.odata.valuelist` fields to put SAP RPT-1 recommendations into draft-enabled Fiori UIs without a handler. The call itself is the SAP Cloud SDK for AI's JavaScript packages, [@sap-ai-sdk/foundation-models](artifact:sap-ai-sdk-foundation-models) and [@sap-ai-sdk/orchestration](artifact:sap-ai-sdk-orchestration), each of which streams a chat completion over server-sent events, and which model a CAP-level agent talks to is `cds.requires.llm`, whose `aicore` kind is the default for `production` and `hybrid`.","where_it_stops":"At the binding, and at what the local kinds answer with. A production deployment of the recommendations needs an SAP AI Core service binding, and without one local development answers from a mock implementation for UI smoke tests; the `auto` kind reads a local Claude or OpenCode configuration and `mock` returns dummy responses, so neither is a model an application ships against. The plugin's own local vector embeddings and the tooling around them are experimental, with breaking changes expected.","community_adds":"A backend SAP's clients do not reach: [@saptarishi/cds-plugin-llm](artifact:saptarishi-cds-plugin-llm) registers many provider kinds under the same `cds.requires.llm` the agent plugin uses, so a development profile on a local Ollama model and a production profile on the Generative AI Hub differ by configuration alone. [cap-llm-plugin](artifact:cap-llm-plugin) and [@geertjanklaps/cds-toon-ai-protocol-adapter](artifact:geertjanklaps-cds-toon-ai-protocol-adapter) stay on SAP AI Core and change what is sent to it, the first anonymising sensitive fields in [SAP HANA Cloud](artifact:btp-hana-cloud) and the second the wire format.","sources":[{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP plugins — AI","checked":"2026-10-15","quote":"Additionally, the AI Plugin embeds SAP AI Core as a standard CAP service following the Calesi pattern, giving you automatic service binding resolution along with tenant-aware access including managed resource groups and deployments."},{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP plugins — AI, recommendations","checked":"2026-10-15","quote":"It automatically detects fields with `@Common.ValueList` or `@cds.odata.valuelist` annotations and provides intelligent recommendations in SAP Fiori draft-enabled UIs without requiring custom handlers."},{"url":"https://raw.githubusercontent.com/cap-js/ai/main/README.md","title":"cap-js/ai — README, Recommendations","checked":"2026-10-15","quote":"A production deployment requires an SAP AI Core service binding."},{"url":"https://raw.githubusercontent.com/cap-js/ai/main/README.md","title":"cap-js/ai — README, experimental facilities","checked":"2026-10-15","quote":"The SQLite extensions, local vector embeddings, local model management, and the related tooling are experimental facilities"},{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript)","checked":"2026-10-15","quote":"The `OrchestrationClient` supports streaming responses for chat completion requests based on the Server-sent events standard."},{"url":"https://sap.github.io/ai-sdk/docs/js/foundation-models/openai/chat-completion","title":"Chat Completion — SAP Cloud SDK for AI (JavaScript), foundation models","checked":"2026-10-15","quote":"The `AzureOpenAiChatClient` supports streaming response for chat completion requests based on the Server-sent events standard."},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm — capire","checked":"2026-10-15","quote":"The default for `production` and `hybrid`, connects to SAP AI Core"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm auto — capire","checked":"2026-10-15","quote":"The default for `development`, using local Claude or OpenCode configuration"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm mock — capire","checked":"2026-10-15","quote":"A pure mock for `development`, provides dummy responses when called"}]},"java":{"state":"core-only","assessed_at":"2026-10-15","what_core_does":"[cap-java/cds-ai](artifact:cap-java-cds-ai) is the bridge: com.sap.cds:cds-feature-ai-core covers resource group management, deployment lifecycle, configuration CRUD and the prediction API against [SAP AI Core](artifact:btp-ai-core), and com.sap.cds:cds-feature-recommendations calls SAP RPT-1 over the same connection for Fiori field recommendations. capire's plugin list says the Java version of the AI plugin is in alpha. An agent reaches a chat model through the `cds-adapter-agent` dependency, where `kind` is `aicore`, `ollama` or `mocked`.","where_it_stops":"At the binding, as on Node.js: without an SAP AI Core binding the plugins fall back to mock implementations for local development, and the `mocked` chat model kind returns static responses without calling any model. The page that configures the chat model marks that configuration alpha, and reaching a model served by Ollama means adding LangChain4j's Ollama integration to `srv/pom.xml` separately.","sources":[{"url":"https://raw.githubusercontent.com/cap-java/cds-ai/115664cf3b18a2bab02f27fbc44ca44f81b54f59/README.md","title":"cap-java/cds-ai — README","checked":"2026-10-15","quote":"Bridges CAP Java to SAP AI Core - resource group management, deployment lifecycle, configuration CRUD, and prediction API"},{"url":"https://raw.githubusercontent.com/cap-java/cds-ai/115664cf3b18a2bab02f27fbc44ca44f81b54f59/README.md","title":"cap-java/cds-ai — README, mock fallback","checked":"2026-10-15","quote":"Without an AI Core binding the plugins fall back to mock implementations for local development."},{"url":"https://cap.cloud.sap/docs/plugins/","title":"CAP plugins — AI, Java","checked":"2026-10-15","quote":"The Java version of this plugin is currently in alpha."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, agent adapter","checked":"2026-10-15","quote":"Add the agent adapter to your `srv/pom.xml`:"},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, chat model kinds","checked":"2026-10-15","quote":"The model provider: `aicore`, `ollama`, or `mocked`."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, mocked kind","checked":"2026-10-15","quote":"The `mocked` kind returns static responses without calling any model."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, Chat Model Configuration","checked":"2026-10-15","quote":"Chat Model Configuration <Alpha />"},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, Ollama","checked":"2026-10-15","quote":"For local testing, you can run an agent against a local model served by [Ollama](https://ollama.com/)."}]},"abap-cloud":{"state":"core-only","assessed_at":"2026-09-14","what_core_does":"The [ABAP AI SDK](artifact:sap-abap-ai-sdk)'s classes are released: [SAP-samples/abap-cheat-sheets](artifact:sap-samples-abap-cheat-sheets) files its generative-AI chapter under Generative AI in ABAP Cloud and describes it as exploring \"released ABAP classes available in the ABAP AI SDK powered by Intelligent Scenario Lifecycle Management\", so the call to a model in the Generative AI Hub is code a RAP, ADT-only object can make.","where_it_stops":"It stops at Intelligent Scenario Lifecycle Management's own setup: the same chapter notes that before using the SDK, \"administrative tasks outlined in the documentation have to be performed\", including creating the intelligent scenario and the intelligent scenario model the released classes call.","sources":[{"url":"https://github.com/SAP-samples/abap-cheat-sheets/blob/main/30_Generative_AI.md","title":"SAP-samples/abap-cheat-sheets: Generative AI","checked":"2026-09-14","quote":"This ABAP cheat sheet provides references to detailed information on Generative AI in ABAP Cloud and explores released ABAP classes available in the ABAP AI SDK powered by Intelligent Scenario Lifecycle Management."},{"url":"https://github.com/SAP-samples/abap-cheat-sheets/blob/main/30_Generative_AI.md","title":"SAP-samples/abap-cheat-sheets: Generative AI","checked":"2026-09-14","quote":"As a prerequisite to using the ABAP AI SDK, you have to create intelligent scenarios (ABAP repository objects containing various features to enable, for example, the instantiation of the completion API) and intelligent scenario models (defining, for example, which LLM is used)."}]},"web-components":{"state":"core-only","assessed_at":"2026-09-14","what_core_does":"The `@ui5/webcomponents-ai` package of [@ui5/webcomponents](artifact:ui5-webcomponents) adds AI controls to the framework-independent library: an AI Button, AI-flavoured Input and TextArea, and a `ui5-ai-prompt-input` that lets someone \"write custom instructions in natural language, so that AI is guided to generate content tailored to user needs\", plus acknowledgment, custom-prompt, guided-prompt, quick-prompt and regenerate patterns built from them.","where_it_stops":"It stops at the surface: the package is \"under development and considered experimental\", its component APIs are \"subject to change\", and it supports the Horizon themes only.","sources":[{"url":"https://ui5.github.io/webcomponents/docs/getting-started/components-packages/","title":"Components & Packages | UI5 Web Components","checked":"2026-10-14","quote":"Provides web components implementing AI-related visual and interaction."},{"url":"https://ui5.github.io/webcomponents/components/ai/PromptInput/","title":"PromptInput | UI5 Web Components","checked":"2026-10-14","quote":"The @ui5/webcomponents-ai package is under development and considered experimental - components' APIs are subject to change. Furthermore, the package supports Horizon themes only."}]}},"framing_by_flavor":{"java":{"description":"In CAP Java the answer is a Maven dependency rather than a cds-plugin: [cap-java/cds-ai](artifact:cap-java-cds-ai) carries the bridge to [SAP AI Core](artifact:btp-ai-core) and the Fiori field recommendations, and an agent reaches a chat model through the `cds-adapter-agent` dependency, with LangChain4j's Ollama integration added to `srv/pom.xml` for a local one. The cds-plugins behind this door do not load here, so an artifact that registers a provider kind under `cds.requires.llm` answers on the Node.js flavor only."},"web-components":{"description":"Framework-independent, so the concern sits entirely in the component: the `@ui5/webcomponents-ai` package of [@ui5/webcomponents](artifact:ui5-webcomponents) ships an AI Button, an AI Input and TextArea, and a PromptInput a user writes instructions into, with no CAP plugin's server half attached to them. That is a different shape from the freestyle door, where [ui5-cap-ai-features](artifact:lemaiwo-ui5-cap-ai-features) ships both the control and the service behind it in one package."}},"facets":[{"key":"model_access","label":"Models it reaches","kind":"one","values":["SAP AI Core","SAP AI Core and other providers","Other providers"],"ecosystems":["cap"]},{"key":"response_streaming","label":"Streams the response","kind":"flag","ecosystems":["cap"]}],"normative_relevance":[{"instrument":"instrument:sap-developer-license-3-2-cap","prominence":"contextual","sections":["3"],"applies_when":"Covered SAP materials or a covered CAP customer application are used as training data or to develop or refine an AI model or system.","note":"Calling a model for inference is not automatically AI training. Section 3 matters when the covered material or application participates in training, model development, refinement or the text-and-data-mining uses it names.","applies_to":{"ecosystems":["cap"]},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"model development or refinement (including language learning models)"}]}],"drafted_with_ai":true},"sap_delivery":{"door":"cap","all":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-js-ai","name":"@cap-js/ai","json":"/artifacts/cap-js-ai.json"},{"ref":"artifact:sap-ai-sdk-ai-api","name":"@sap-ai-sdk/ai-api","json":"/artifacts/sap-ai-sdk-ai-api.json"},{"ref":"artifact:sap-ai-sdk-core","name":"@sap-ai-sdk/core","json":"/artifacts/sap-ai-sdk-core.json"},{"ref":"artifact:sap-ai-sdk-foundation-models","name":"@sap-ai-sdk/foundation-models","json":"/artifacts/sap-ai-sdk-foundation-models.json"},{"ref":"artifact:sap-ai-sdk-orchestration","name":"@sap-ai-sdk/orchestration","json":"/artifacts/sap-ai-sdk-orchestration.json"},{"ref":"artifact:sap-ai-sdk-prompt-registry","name":"@sap-ai-sdk/prompt-registry","json":"/artifacts/sap-ai-sdk-prompt-registry.json"},{"ref":"artifact:cap-java-cds-ai","name":"cap-java/cds-ai","json":"/artifacts/cap-java-cds-ai.json"}]},"by_flavor":{"node":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-js-ai","name":"@cap-js/ai","json":"/artifacts/cap-js-ai.json"}]},"java":{"built_in":[],"documented_pattern":[],"announced":[],"packages":[{"ref":"artifact:cap-java-cds-ai","name":"cap-java/cds-ai","json":"/artifacts/cap-java-cds-ai.json"}]}}},"edges":{"use_cases":[{"id":"change-the-model-a-cap-service-calls","name":"Change which model a CAP service calls","capability":"capability:llm-integration","ecosystem":"cap","outcome":"A CAP service that already calls a language model is pointed at a different one — a newer version, a cheaper one, or a model from another vendor — and the handler that calls it is not rewritten.","boundary":"Covers where the choice of model is made and what has to change with it. Does not cover whether the answers are as good afterwards, which is [agent evaluation](capability:agent-evals), nor the prompt that would have to be rewritten for a different model's habits, which is [prompt management](capability:prompt-management). Which models a subaccount is entitled to, and what they cost, is a project question and is not assessed here.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. Every option behind this door either names one service it reaches or names several, and nothing on the page said which.","also_in":["btp","abap"],"requirement_dimensions":["Whether the model has to be one SAP AI Core hosts, or may be reached at a vendor's own endpoint","Whether the application runs on Node.js or Java","Whether the switch has to be configuration a deployment can change, or may be a code release","Whether the same handler must keep working against both models at once, as a fallback or an A/B run"],"paths":[{"key":"orchestration","name":"Through the orchestration service's harmonised API","sources":[{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript)","checked":"2026-10-15","quote":"The [Harmonized API](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/harmonized-api?locale=en-US) lets you use different foundation models without the need to change the client code. You can switch from one LLM to another easily like the example below."}]},{"key":"cap-llm-plugin-orchestration","name":"Through cap-llm-plugin's orchestration support","sources":[{"url":"https://unpkg.com/cap-llm-plugin@1.5.1/README.md","title":"cap-llm-plugin 1.5.1 — README on unpkg","checked":"2026-10-15","quote":"Support for SAP AI Core orchestration service's harmonized chat completion APIs"}]}],"contributions":[{"ref":"artifact:btp-ai-core","role":"the service the choice is made in","state":"documented","paths":["orchestration","cap-llm-plugin-orchestration"],"description":"Holds the models and the deployment the call names, and puts one harmonised API in front of them, which is what makes a change of model configuration rather than a client change. SAP's own BTP AI best-practices page states it in those terms.","remaining_work":"Deploy the model to be switched to in a resource group the application's binding can reach, and keep the deployment id or the model name the call carries in configuration rather than in the handler. Nothing here tells the application which model to use.","remaining_kinds":["configuration"],"sources":[{"url":"https://btp-ai-bp.docs.sap/docs/technology/sap-ai-launchpad","title":"SAP AI Launchpad — SAP BTP AI Best Practices, Technologies","checked":"2026-09-14","quote":"the harmonized API allows you to use different foundation models without changing the client code"},{"url":"https://btp-ai-bp.docs.sap/docs/technology/sap-ai-core","title":"SAP AI Core — SAP BTP AI Best Practices, Technologies","checked":"2026-09-14","quote":"Access generative AI capabilities and prompt lifecycle management via the generative AI hub."}]},{"ref":"artifact:sap-ai-sdk-orchestration","role":"client the model is named in","state":"documented","paths":["orchestration"],"flavors":["node"],"description":"Puts the model in one property: the documentation says to choose the LLM by setting `name` in the `promptTemplating.model` configuration, and that the harmonised API behind it lets a different foundation model be used without the client code changing, with a switch shown as an example. An optional `version` and `params` sit beside the name for a model's own settings.","remaining_work":"Keep that configuration outside the handler if the switch is to be a deployment change rather than a release, and make sure the model named is one the bound resource group has a deployment for. The package is ESM-only, which a CommonJS CAP project has to deal with before any of this.","remaining_kinds":["configuration","application-code"],"sources":[{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript), model choice","checked":"2026-10-15","quote":"Choose the LLM by setting the `name` property in the `promptTemplating.model` configuration."},{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript), harmonised API","checked":"2026-10-15","quote":"lets you use different foundation models without the need to change the client code"}]},{"ref":"artifact:cap-llm-plugin","role":"plugin with an orchestration route","state":"conditional","paths":["cap-llm-plugin-orchestration"],"flavors":["node"],"version_scope":"README at version 1.5.1, the version npm serves as latest.","conditions":["The orchestration route is used: the README lists support for the orchestration service's harmonised chat-completion APIs beside its own simplified chat-completion method, and only the harmonised API is what SAP describes as letting the model change without the client code changing","The records and the models stay on SAP HANA Cloud and SAP AI Core, which every feature in this README is written against"],"description":"Reaches the same harmonised API from a CAP service: the README's feature list names support for SAP AI Core's orchestration service harmonised chat-completion APIs, so a service already calling the plugin can take a different model through that route.","remaining_work":"Read which of the plugin's two chat paths an existing handler uses, because the simplified chat-completion method is not the harmonised one; the README does not say what changes in the handler when the model does. The README also states that the plugin is not an official SAP product and is published as a community contribution.","sources":[{"url":"https://unpkg.com/cap-llm-plugin@1.5.1/README.md","title":"cap-llm-plugin 1.5.1 — README on unpkg, orchestration","checked":"2026-10-15","quote":"Support for SAP AI Core orchestration service's harmonized chat completion APIs"},{"url":"https://unpkg.com/cap-llm-plugin@1.5.1/README.md","title":"cap-llm-plugin 1.5.1 — README on unpkg, chat completion","checked":"2026-10-15","quote":"Simple access to LLM models via SAP AI Core with simplified method for chat completion"},{"url":"https://unpkg.com/cap-llm-plugin@1.5.1/README.md","title":"cap-llm-plugin 1.5.1 — README on unpkg, not an SAP product","checked":"2026-10-15","quote":"The plugin is not an official SAP product. It is released under the Apache 2.0 license and is published as a community contribution."}]},{"ref":"artifact:saptarishi-cds-plugin-llm","role":"provider kind chosen per profile","state":"documented","flavors":["node"],"description":"Moves the choice out of SAP AI Core altogether: eleven provider kinds are registered under `cds.requires.llm`, the client `cds.connect.to('llm')` returns is the same whichever is configured, and the README states outright that swapping backends is a configuration change rather than a code change. A development profile on a local Ollama model and a production profile on the Generative AI Hub are the same handler.","remaining_work":"Give each kind its own credentials in `cds.requires` or the environment, and accept that the prompt and the tool schemas are the same text sent to a different vendor's model, which the README does not claim behaves the same. The package is independent and not an SAP-supported dependency.","remaining_kinds":["configuration"],"sources":[{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-llm/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-llm README","checked":"2026-09-18","quote":"A CAP service kind that turns `cds.connect.to('llm')` into a working LLM client — with one unified interface (`chat`, `stream`, `embed`, `batch`) that speaks to any of eleven backends. Swapping backends is a config change, not a code change."},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-llm/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-llm README, opening line","checked":"2026-10-15","quote":"LLM-agnostic AI platform for SAP CAP. **11 providers** behind one unified interface"}]},{"ref":"artifact:jerome-benoit-sap-ai-provider","role":"provider for an SDK written elsewhere","state":"unknown","flavors":["node"],"description":"Reaches the models SAP AI Core hosts through its orchestration API or its foundation models API, behind the interface a Vercel AI SDK application already calls. What the README does not say is what changes when the model does: it names the models available and the two routes, and no sentence states that the switch leaves the calling code alone.","remaining_work":"Read how the model is named when the provider is constructed, which this reading did not establish, before relying on the switch being configuration.","sources":[{"url":"https://raw.githubusercontent.com/jerome-benoit/sap-ai-provider/main/README.md","title":"jerome-benoit/sap-ai-provider — README, models","checked":"2026-10-15","quote":"all models available through SAP AI Core, including models from OpenAI, Anthropic Claude, Google Gemini, Amazon Nova, Mistral AI, Cohere, and SAP"}]}],"readings":[{"ref":"content:using-cloud-sdk-for-ai-in-a-commonjs-cap-project","relevance":"The obstacle the orchestration way begins with rather than ends with: the author's CAP project is CommonJS, the SDK is ESM-only, and the post records the esbuild workaround and the judgement that converting the project was too risky.","flavors":["node"]}],"unknowns":["@jerome-benoit/sap-ai-provider is recorded as not established rather than as covering this: its README names the models and the two APIs it reaches them through, and no sentence read on 2026-10-15 says what changes in the application when the model changes.","@cap-js/ai is not named here. Its README describes the AICore CAP service and the value-help recommendations and says nothing about choosing which model answers, so nothing was read for this outcome either way.","CAP Java has no contribution. capire's java/ai page configures a chat model and SAP publishes a Java SDK for AI, but no artifact in the graph carries the Java client, so nothing in this record states the Java side.","Whether a subaccount is entitled to the model it would switch to, and what the switch costs, follows from the project's AI Core entitlement and was not assessed.","No source read here shows a model actually swapped in a running CAP application. The harmonised API's own page shows the configuration change; what else a project had to touch is not recorded anywhere this reading found."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"cut-the-tokens-a-cap-service-sends-to-a-model","name":"Cut the tokens a CAP service spends sending its data to a model","capability":"capability:llm-integration","ecosystem":"cap","outcome":"The same rows a CAP service already hands a model are sent in fewer tokens, so the bill and the latency fall without the service code or the model changing.","boundary":"Covers the shape of what goes over the wire into a model call. Does not cover choosing a cheaper model, which is the outcome assessed beside this one, nor shortening the prompt itself, which is [prompt management](capability:prompt-management), nor retrieving fewer rows in the first place, which is [retrieval-augmented generation](capability:retrieval-augmented-generation). What a project is billed is its own contract with SAP or a vendor and is not assessed here.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. One option behind this door does not call a model at all and sits on the capability because of what it does to the payload, which is a distinction the options list could not make.","requirement_dimensions":["Whether the consumer of the service can be changed to ask for another content type","Whether the call goes out as REST or as OData","Whether the saving has to be measured rather than assumed","Whether the rows are sent whole or already reduced before the call"],"contributions":[{"ref":"artifact:geertjanklaps-cds-toon-ai-protocol-adapter","role":"wire format between the service and the model","state":"documented","flavors":["node"],"description":"Changes the notation and nothing else: the plugin converts between JSON and TOON, Token-Oriented Object Notation, in both directions at the protocol layer, in a REST variant and an OData one, and its README states that this typically reduces token counts while maintaining data integrity. It counts the tokens on both sides and logs the comparison, so the saving on a project's own payloads is measured rather than taken on trust. It calls no model: it sits where the OData and GraphQL adapters sit, and a consumer selects it by content type.","remaining_work":"Point whatever assembles the prompt at the adapter's content type, since the saving only happens on calls that go through it, and read the logged counts to find out whether it earned its place on the shapes this project actually sends. Whether a given model reads TOON as reliably as JSON is not addressed by the plugin and was not read here.","sources":[{"url":"https://www.npmjs.com/package/@geertjanklaps/cds-toon-ai-protocol-adapter","title":"@geertjanklaps/cds-toon-ai-protocol-adapter — README","checked":"2026-09-08","quote":"This plugin provides automatic conversion between JSON and Toon format, optimizing data exchange for AI applications by typically reducing token counts while maintaining data integrity."}]}],"readings":[{"ref":"content:cds-toon-ai-protocol-adapter-cutting-token-costs","relevance":"The author's own account of the plugin on a CAP service: the wire format changes without the service code doing so, in a REST variant and an OData one, with token counts reported on both sides.","shows":["artifact:geertjanklaps-cds-toon-ai-protocol-adapter"],"flavors":["node"]},{"ref":"content:how-to-reduce-prompt-token-costs-using-toon","relevance":"The cost without the plugin: token spend treated as a running cost rather than a detail, and TOON as the lever, which is the reasoning the adapter rests on."}],"unknowns":["No source read here states anything the CAP runtimes themselves do about the tokens a model call spends, so no core contribution is recorded. That is an absence of a reading and not a statement that nothing exists.","@saptarishi/cds-plugin-llm's README lists exact and semantic response caches and cost budgets among its middleware, which would reach this outcome by not making the call rather than by shrinking it. No sentence for them was read in this pass, so it is not recorded as a contribution.","Whether a model answers as accurately from TOON as from JSON is the question behind the saving and neither source read here measures it; both report tokens.","The adapter's own saving is reported as typical rather than quantified, and the measurement it logs is of a project's own payloads, so no figure in this record is general."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"run-a-cap-service-against-a-model-without-an-ai-core-binding","name":"Run a CAP service's model calls with no SAP AI Core binding","capability":"capability:llm-integration","ecosystem":"cap","outcome":"A CAP project whose handlers call a language model starts, serves and answers on a laptop or in a pipeline where no SAP AI Core instance is bound — either from a mock, or from a model running locally.","boundary":"Covers what answers the call when the binding is absent, and what that answer is worth. Does not cover the vector half of a local run, which is [retrieval-augmented generation](capability:retrieval-augmented-generation), nor the mocked users and in-memory database the rest of a local CAP run leans on, which is [local development](capability:local-development). Whether a developer's machine may hold a model or a vendor key at all is an organisation's rule and is not assessed here.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. Every SAP package behind this door states what happens without a binding, and the two statements are not the same thing.","requirement_dimensions":["Whether the run needs a real model's answer, or only an answer-shaped response","Whether the application runs on Node.js or Java","Whether the call is an agent's or a handler's own","Whether a model may be installed on the machine, or a vendor key used from it","Whether the same configuration has to work unchanged in a deployed profile"],"contributions":[{"ref":"artifact:cap-js-ai","role":"mock in place of the service","state":"conditional","flavors":["node"],"conditions":["The recommendations are what is being run: the README names the mock for them, not for every call the AICore service can make","The mock is for UI smoke tests, in the README's own words, so what comes back is not a model's answer"],"description":"Answers without the service: the README states that a production deployment requires an SAP AI Core service binding and that without one, local development uses a mock implementation for UI smoke tests. The project starts and the Fiori field shows a recommendation with nothing bound.","remaining_work":"Nothing to install for the mock, and nothing it can tell you about the answers a real deployment would give. Anything beyond the recommendations, including the AICore service the plugin embeds, was not read here for a no-binding run.","sources":[{"url":"https://raw.githubusercontent.com/cap-js/ai/main/README.md","title":"cap-js/ai — README, Recommendations","checked":"2026-10-15","quote":"A production deployment requires an SAP AI Core service binding."},{"url":"https://raw.githubusercontent.com/cap-js/ai/main/README.md","title":"cap-js/ai — README, Recommendations, mock","checked":"2026-09-23","quote":"A production deployment requires an [SAP AI Core](https://help.sap.com/docs/sap-ai-core) service binding. Without one, local development uses a mock implementation for UI smoke tests."}]},{"ref":"artifact:cap-java-cds-ai","role":"mock in place of the service","state":"conditional","flavors":["java"],"conditions":["Local development: the README scopes the fallback to it","The answer is a mock implementation's, not a model's","capire's plugin list says the Java version of the AI plugin is currently in alpha"],"description":"The same shape on the Java side: the README states that without an AI Core binding the plugins fall back to mock implementations for local development, so both the AI Core bridge and the recommendations module answer with nothing bound.","remaining_work":"Add the Maven dependency and accept that both modules sit at 0.0.2-alpha on Maven Central, with capire calling the Java version alpha. The README says nothing about reaching a real model without a binding.","remaining_kinds":["configuration"],"sources":[{"url":"https://raw.githubusercontent.com/cap-java/cds-ai/115664cf3b18a2bab02f27fbc44ca44f81b54f59/README.md","title":"cap-java/cds-ai — README, mock fallback","checked":"2026-10-15","quote":"Without an AI Core binding the plugins fall back to mock implementations for local development."},{"url":"https://cap.cloud.sap/docs/plugins/#ai","title":"CAP plugins — AI, Java","checked":"2026-10-15","quote":"The Java version of this plugin is currently in alpha."}]},{"ref":"artifact:cap-js-agents","role":"local LLM kinds for an agent","state":"conditional","flavors":["node"],"conditions":["The call is a CAP-level agent's: the kinds are configured under `cds.requires.llm`, which capire documents with this plugin","For `auto`, a local Claude or OpenCode configuration already exists on the machine","For `mock`, what comes back is a dummy response, in capire's own words"],"description":"Gives the `development` profile two kinds that are not SAP AI Core: capire documents `auto` as the default for `development`, using a local Claude or OpenCode configuration, and `mock` as a pure mock for `development` that provides dummy responses when called. `aicore`, the production and hybrid default, is the one that needs the binding.","remaining_work":"Install the plugin and annotate a service as an agent, which is a larger change than configuring a client. `auto` reads a configuration this reading did not inspect, so what it sends where is not established.","remaining_kinds":["configuration"],"sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm auto — capire","checked":"2026-10-15","quote":"The default for `development`, using local Claude or OpenCode configuration"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm mock — capire","checked":"2026-10-15","quote":"A pure mock for `development`, provides dummy responses when called"},{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, cds.requires.llm — capire","checked":"2026-10-15","quote":"The default for `production` and `hybrid`, connects to SAP AI Core"}]},{"ref":"artifact:cap-java-cds-services-bom","role":"CAP Java release the agent adapter ships in","state":"conditional","flavors":["java"],"conditions":["The agent adapter is added: capire says to add `com.sap.cds:cds-adapter-agent` to `srv/pom.xml`","For a model served by Ollama, LangChain4j's Ollama integration is added to `srv/pom.xml` as well","capire marks the chat model configuration this rests on alpha"],"description":"Carries the Java side's two non-AI-Core kinds: capire's CAP Java AI page makes `kind` the model provider, `aicore`, `ollama` or `mocked`, says that for local testing an agent can be run against a local model served by Ollama, and that the `mocked` kind returns static responses without calling any model. The atlas holds no separate entry for `cds-adapter-agent`, so the release's bill of materials stands for it here, as it does for the other CAP Java modules documented under java/.","remaining_work":"Add the adapter and, for Ollama, the LangChain4j integration and a model pulled on the machine. The page marks chat model configuration alpha, and whether the atlas should hold `cds-adapter-agent` as an entry of its own is an open question this record does not settle.","remaining_kinds":["configuration"],"sources":[{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, chat model kinds","checked":"2026-10-15","quote":"The model provider: `aicore`, `ollama`, or `mocked`."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, Ollama","checked":"2026-10-15","quote":"For local testing, you can run an agent against a local model served by [Ollama](https://ollama.com/)."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, mocked kind","checked":"2026-10-15","quote":"The `mocked` kind returns static responses without calling any model."},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, agent adapter","checked":"2026-10-15","quote":"Add the agent adapter to your `srv/pom.xml`:"},{"url":"https://cap.cloud.sap/docs/java/ai","title":"AI Integration — capire, CAP Java, Chat Model Configuration","checked":"2026-10-15","quote":"Chat Model Configuration <Alpha />"}]},{"ref":"artifact:saptarishi-cds-plugin-llm","role":"local provider kind","state":"documented","flavors":["node"],"description":"Reaches a real model with nothing bound: Ollama is one of the eleven provider kinds the README lists, registered under `cds.requires.llm` like the rest, so a `development` profile answers from a model on the machine and a `production` profile from the Generative AI Hub without the handler changing. This is the one way read here where a laptop run gets a model's answer rather than a mock's.","remaining_work":"Install Ollama and pull a model, and give the kind its credentials or host in `cds.requires` or the environment. The answers come from whatever local model is pulled, which is not the model production will use, so a run proves the wiring and not the output.","remaining_kinds":["configuration"],"sources":[{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-llm/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-llm README","checked":"2026-09-18","quote":"LLM-agnostic AI platform for SAP CAP. **11 providers** behind one unified interface — Anthropic, Google Gemini, AWS Bedrock, Azure OpenAI, Ollama, Groq, Fireworks, DeepSeek, Mistral, any OpenAI-compatible endpoint, and SAP Generative AI Hub"},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-llm/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-llm README","checked":"2026-09-18","quote":"A CAP service kind that turns `cds.connect.to('llm')` into a working LLM client — with one unified interface (`chat`, `stream`, `embed`, `batch`) that speaks to any of eleven backends. Swapping backends is a config change, not a code change."}]}],"readings":[{"ref":"content:talk-to-the-database-cap-and-sqlite-with-gemini","relevance":"The shape of a laptop run that calls a real model rather than a mock: a CAP service on SQLite with the translation done by a model outside the Generative AI Hub. The author writes it as a learning exercise rather than a pattern, and the choice of model is the part worth reading.","flavors":["node"]}],"unknowns":["A mock is not a model. Every SAP fallback read here answers without calling one, which is enough to start a project and not enough to judge an answer, so a run that needs real output is on the Ollama ways only.","What capire's `auto` kind reads, and whether an `auto` run sends the prompt off the machine, was not established: the page names a local Claude or OpenCode configuration and nothing further was read about it.","The CAP Java chat model kinds are recorded against com.sap.cds:cds-services-bom because the atlas holds no entry for com.sap.cds:cds-adapter-agent. Whether that module deserves its own entry is an open curation question.","Whether @cap-js/ai's embedded AICore CAP service, as opposed to its recommendations, answers at all without a binding was not established; the README's mock sentence is about the recommendations.","No source read here runs a CAP Java agent against Ollama end to end. capire documents the dependency and the kind; what a project met doing it is not recorded anywhere this reading found."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"},{"id":"stream-a-model-answer-from-a-cap-service","name":"Stream a model's answer out of a CAP service","capability":"capability:llm-integration","ecosystem":"cap","outcome":"A CAP service receives a model's answer in pieces as the model writes it, rather than one payload after the model has finished, so a chat surface can show text appearing instead of a spinner.","boundary":"Covers getting the chunks out of the model and into the service. Carrying them on to a browser is the application's own endpoint and, where that endpoint is a socket, [WebSocket support](capability:websocket); rendering them is the UI's. Whether a long answer should be streamed at all, and what it costs in tokens, is not assessed here.","origin":"Editorial hypothesis while re-assessing this capability's CAP coverage on 2026-10-15. Four options behind this door document a stream method and capire lists streaming among the agent features still in progress, which is a difference the page could not show.","requirement_dimensions":["Whether the application runs on Node.js or Java","Whether the call is an agent's or a handler's own","Whether the tool calls a streamed turn makes have to be read as well as the text","Whether a stream has to be abandoned part-way, as on a cancelled request","Which transport carries the chunks to the client"],"needs":[{"key":"response_streaming"}],"contributions":[{"ref":"artifact:sap-ai-sdk-orchestration","role":"streaming client","state":"documented","flavors":["node"],"description":"Streams over server-sent events: the documentation states that the `OrchestrationClient` supports streaming responses for chat completion based on that standard, that `stream()` returns a stream of chunk responses, and that a streaming request can be aborted with the `AbortController` API. `toContentStream()` yields the delta text, `getToolCalls()` reads the tool calls at the end of a stream, and the orchestration service offers its own streaming options beside the model's, such as a maximum number of characters per chunk.","remaining_work":"Carry the chunks to the client, which is the application's own endpoint and not in this package, and decide what a half-written answer does to a handler that was going to validate the whole one. The package is ESM-only, which a CommonJS CAP project has to deal with first.","remaining_kinds":["application-code"],"sources":[{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript)","checked":"2026-10-15","quote":"The `OrchestrationClient` supports streaming responses for chat completion requests based on the Server-sent events standard."},{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript), stream method","checked":"2026-10-15","quote":"Use the `stream()` method to receive a stream of chunk responses from the model."},{"url":"https://sap.github.io/ai-sdk/docs/js/orchestration/chat-completion","title":"Orchestration Chat Completion — SAP Cloud SDK for AI (JavaScript), abort","checked":"2026-10-15","quote":"Streaming request can be aborted using the `AbortController` API."}]},{"ref":"artifact:sap-ai-sdk-foundation-models","role":"streaming client","state":"documented","flavors":["node"],"description":"The same mechanism one layer down, without the orchestration modules around it: the documentation states that the `AzureOpenAiChatClient` supports streaming response for chat completion requests based on the server-sent events standard, with the client constructed on a deployment.","remaining_work":"Carry the chunks onward, as above, and accept that the templating, masking and filtering the orchestration client applies around a call are not here, so anything of that kind is the application's own code.","remaining_kinds":["application-code"],"sources":[{"url":"https://sap.github.io/ai-sdk/docs/js/foundation-models/openai/chat-completion","title":"Chat Completion — SAP Cloud SDK for AI (JavaScript), foundation models","checked":"2026-10-15","quote":"The `AzureOpenAiChatClient` supports streaming response for chat completion requests based on the Server-sent events standard."}]},{"ref":"artifact:saptarishi-cds-plugin-llm","role":"stream on a CAP service kind","state":"documented","flavors":["node"],"description":"Puts the stream on the client `cds.connect.to('llm')` returns: `stream` is one of the four methods of the unified interface the README's opening sentence names, beside `chat`, `embed` and `batch`, and the README describes it as getting tokens as they arrive from the model instead of waiting for the full response. Because the backend is a profile, the same streamed handler runs against the Generative AI Hub or a local model.","remaining_work":"Carry the chunks onward, and configure the provider kind and its credentials. Whether a given provider kind streams as well as the others is not stated per kind in what was read.","remaining_kinds":["configuration","application-code"],"sources":[{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-llm/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-llm README","checked":"2026-09-18","quote":"A CAP service kind that turns `cds.connect.to('llm')` into a working LLM client — with one unified interface (`chat`, `stream`, `embed`, `batch`) that speaks to any of eleven backends. Swapping backends is a config change, not a code change."},{"url":"https://raw.githubusercontent.com/kalyanjanumpally/sap-joule-ai-plugin/main/cds-plugin-llm/README.md","title":"kalyanjanumpally/sap-joule-ai-plugin — cds-plugin-llm README, streaming","checked":"2026-10-15","quote":"Get tokens as they arrive from the model instead of waiting for the full response"}]},{"ref":"artifact:jerome-benoit-sap-ai-provider","role":"streaming provider for an SDK written elsewhere","state":"documented","flavors":["node"],"description":"Keeps the stream the Vercel AI SDK already expects while the model comes from SAP AI Core: the README lists streaming support among the package's features, as real-time text generation with structured V3 blocks.","remaining_work":"Carry the chunks onward through whatever the Vercel AI SDK application already uses for that, and read which of the package's versioned entrypoints the project is on, since the README names AI SDK 5 to 7 behind separate ones.","sources":[{"url":"https://raw.githubusercontent.com/jerome-benoit/sap-ai-provider/main/README.md","title":"jerome-benoit/sap-ai-provider — README, features","checked":"2026-10-15","quote":"Streaming Support - Real-time text generation with structured V3 blocks"}]},{"ref":"artifact:cap-js-agents","role":"LLM connection for a CAP-level agent","state":"unknown","flavors":["node"],"description":"Not established either way. capire's CAP-level Agents page lists advanced streaming among the features it says are being worked on and planned for release in the near future, which says that streaming for an agent is to improve and does not say what an agent streams today; nothing read on 2026-10-15 states that it does or that it does not.","remaining_work":"Read what a CAP-level agent returns on a turn today, which this reading did not establish. Until then a chat surface over an agent cannot be planned on a stream from this page alone.","sources":[{"url":"https://cap.cloud.sap/docs/guides/ai/cap-agents","title":"CAP-level Agents, More to come — capire","checked":"2026-10-15","quote":"Advanced Streaming – improved streaming capabilities for agent interactions"}]}],"readings":[{"ref":"content:streaming-llm-output-with-cap-and-websockets","relevance":"The whole outcome and the half this record leaves out, in one post: tokens arriving from the AI SDK's orchestration module and forwarded to the browser as they come, with WebSocket support enabled in CAP, a service with actions and events, and a frontend on the native WebSocket API.","shows":["artifact:sap-ai-sdk-orchestration"],"flavors":["node"]}],"unknowns":["CAP Java has no contribution. capire's java/ai page documents the agent adapter and the chat model kinds and says nothing about streaming, and no artifact in the graph carries SAP's Java client for AI, so nothing in this record states the Java side either way.","Which transport the attached post uses to carry the chunks was not re-established: the page returned HTTP 403 to this reading on 2026-10-15, so the record rests on the content entry's own dated summary and no path is authored for the combination.","@cap-js/agents is recorded as not known rather than as unsupported. capire lists advanced streaming among features in progress, which is a statement about what is coming and not a statement that nothing streams now.","Whether every provider kind of @saptarishi/cds-plugin-llm streams was not established; the README states the method on the unified interface and not per backend.","Neither @cap-js/ai nor cap-llm-plugin is named here: their READMEs say nothing about streaming, so nothing was read for this outcome either way."],"assessed_at":"2026-10-15","drafted_with_ai":true,"omitted_contributions":0,"assessment_kind":"documented-contributions"}],"shared_tasks":[],"related_tasks":[],"options":[{"ref":"artifact:cap-js-ai","name":"@cap-js/ai","json":"/artifacts/cap-js-ai.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:geertjanklaps-cds-toon-ai-protocol-adapter","name":"@geertjanklaps/cds-toon-ai-protocol-adapter","json":"/artifacts/geertjanklaps-cds-toon-ai-protocol-adapter.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:jerome-benoit-sap-ai-provider","name":"@jerome-benoit/sap-ai-provider","json":"/artifacts/jerome-benoit-sap-ai-provider.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:sap-ai-sdk-ai-api","name":"@sap-ai-sdk/ai-api","json":"/artifacts/sap-ai-sdk-ai-api.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ai-sdk-core","name":"@sap-ai-sdk/core","json":"/artifacts/sap-ai-sdk-core.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ai-sdk-foundation-models","name":"@sap-ai-sdk/foundation-models","json":"/artifacts/sap-ai-sdk-foundation-models.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ai-sdk-orchestration","name":"@sap-ai-sdk/orchestration","json":"/artifacts/sap-ai-sdk-orchestration.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:sap-ai-sdk-prompt-registry","name":"@sap-ai-sdk/prompt-registry","json":"/artifacts/sap-ai-sdk-prompt-registry.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:saptarishi-cds-plugin-llm","name":"@saptarishi/cds-plugin-llm","json":"/artifacts/saptarishi-cds-plugin-llm.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:shahid-la-cds-db-nlquery-mcp","name":"@shahid.la/cds-db-nlquery-mcp","json":"/artifacts/shahid-la-cds-db-nlquery-mcp.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:ui5-webcomponents","name":"@ui5/webcomponents","json":"/artifacts/ui5-webcomponents.json","ecosystem":"ui5","origin_ring":"sap-official"},{"ref":"artifact:sap-abap-ai-sdk","name":"ABAP AI SDK","json":"/artifacts/sap-abap-ai-sdk.json","ecosystem":"abap","origin_ring":"sap-official"},{"ref":"artifact:b-tocs-abap-btocs-ollama","name":"abap_btocs_ollama","json":"/artifacts/b-tocs-abap-btocs-ollama.json","ecosystem":"abap","origin_ring":"independent"},{"ref":"artifact:abap2ui5-addons-abap-agent-runtime","name":"abap-agent-runtime","json":"/artifacts/abap2ui5-addons-abap-agent-runtime.json","ecosystem":"abap","origin_ring":"community-org"},{"ref":"artifact:watson-developer-cloud-abap-sdk-nwas","name":"abap-sdk-nwas","json":"/artifacts/watson-developer-cloud-abap-sdk-nwas.json","ecosystem":"abap","origin_ring":"independent"},{"ref":"artifact:ibm-abap-sdk-nwas-x","name":"abap-sdk-nwas-x","json":"/artifacts/ibm-abap-sdk-nwas-x.json","ecosystem":"abap","origin_ring":"independent"},{"ref":"artifact:cap-java-cds-ai","name":"cap-java/cds-ai","json":"/artifacts/cap-java-cds-ai.json","ecosystem":"cap","origin_ring":"sap-official"},{"ref":"artifact:cap-llm-plugin","name":"cap-llm-plugin","json":"/artifacts/cap-llm-plugin.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:abap-ai-llm-client","name":"llm_client","json":"/artifacts/abap-ai-llm-client.json","ecosystem":"abap","origin_ring":"independent"},{"ref":"artifact:microsoft-aisdkforsapabap","name":"Microsoft AI SDK for SAP","json":"/artifacts/microsoft-aisdkforsapabap.json","ecosystem":"abap","origin_ring":"partner"},{"ref":"artifact:btp-ai-core","name":"SAP AI Core","json":"/artifacts/btp-ai-core.json","ecosystem":"btp","origin_ring":"sap-official"},{"ref":"artifact:lemaiwo-ui5-cap-ai-features","name":"ui5-cap-ai-features","json":"/artifacts/lemaiwo-ui5-cap-ai-features.json","ecosystem":"cap","origin_ring":"independent"},{"ref":"artifact:oisee-zllm","name":"zllm","json":"/artifacts/oisee-zllm.json","ecosystem":"abap","origin_ring":"independent"}],"samples":[{"ref":"artifact:sap-samples-ai-enabled-integrations-codejam","name":"ai-enabled-integrations-codejam","json":"/artifacts/sap-samples-ai-enabled-integrations-codejam.json"},{"ref":"artifact:sap-samples-aicore-genai-samples","name":"aicore-genai-samples","json":"/artifacts/sap-samples-aicore-genai-samples.json"},{"ref":"artifact:sap-samples-btp-gen-ai-hub-sdk-samples","name":"btp-gen-ai-hub-sdk-samples","json":"/artifacts/sap-samples-btp-gen-ai-hub-sdk-samples.json"},{"ref":"artifact:lemaiwo-cap-agent-ui5-webui-sample","name":"cap-agent-ui5-webui-sample","json":"/artifacts/lemaiwo-cap-agent-ui5-webui-sample.json"},{"ref":"artifact:miyasuta-cap-openai","name":"cap-openai","json":"/artifacts/miyasuta-cap-openai.json"},{"ref":"artifact:mikezaschka-cap-ui5-gpt-chat","name":"cap-ui5-gpt-chat","json":"/artifacts/mikezaschka-cap-ui5-gpt-chat.json"},{"ref":"artifact:marianfoo-custom-llm-client","name":"custom-llm-client","json":"/artifacts/marianfoo-custom-llm-client.json"},{"ref":"artifact:sap-samples-btp-ai-bp-access-to-generative-ai-models-cap","name":"Sample CAP Application with SAP Cloud SDK for AI","json":"/artifacts/sap-samples-btp-ai-bp-access-to-generative-ai-models-cap.json"},{"ref":"artifact:sap-samples-sap-btp-ai-best-practices","name":"sap-btp-ai-best-practices","json":"/artifacts/sap-samples-sap-btp-ai-best-practices.json"},{"ref":"artifact:ysichov-sap-easy-ai","name":"SAP-easy-AI","json":"/artifacts/ysichov-sap-easy-ai.json"},{"ref":"artifact:sap-samples-btp-cap-genai-rag","name":"SAP-samples/btp-cap-genai-rag","json":"/artifacts/sap-samples-btp-cap-genai-rag.json"},{"ref":"artifact:sap-samples-cap-agentic-engineered","name":"SAP-samples/cap-agentic-engineered","json":"/artifacts/sap-samples-cap-agentic-engineered.json"},{"ref":"artifact:sap-samples-codejam-cap-llm","name":"SAP-samples/codejam-cap-llm","json":"/artifacts/sap-samples-codejam-cap-llm.json"},{"ref":"artifact:sap-samples-codejam-code-based-agents","name":"SAP-samples/codejam-code-based-agents","json":"/artifacts/sap-samples-codejam-code-based-agents.json"},{"ref":"artifact:sap-samples-generative-ai-codejam","name":"SAP-samples/generative-ai-codejam","json":"/artifacts/sap-samples-generative-ai-codejam.json"},{"ref":"artifact:sap-samples-teched2025-ai160","name":"SAP-samples/teched2025-AI160","json":"/artifacts/sap-samples-teched2025-ai160.json"},{"ref":"artifact:sap-samples-teched2025-da266","name":"teched2025-DA266","json":"/artifacts/sap-samples-teched2025-da266.json"},{"ref":"artifact:lemaiwo-ui5-ai-features-demo","name":"ui5-ai-features-demo","json":"/artifacts/lemaiwo-ui5-ai-features-demo.json"},{"ref":"artifact:sap-samples-ui5con-2026-chrome-built-in-ai","name":"ui5con-2026-chrome-built-in-ai","json":"/artifacts/sap-samples-ui5con-2026-chrome-built-in-ai.json"}],"explained_by":[{"ref":"content:devtoberfest-2026-aba-32-business-ai-abap-cloud","name":"How to implement business AI capabilities in ABAP Cloud","json":"/content/devtoberfest-2026-aba-32-business-ai-abap-cloud.json"},{"ref":"content:cap-in-the-age-of-ai-5-agents-wrap-up","name":"CAP in the age of AI #5 - agents wrap-up","json":"/content/cap-in-the-age-of-ai-5-agents-wrap-up.json"},{"ref":"content:devtoberfest-2026-ai21-multiple-models","name":"🟣 Enable Your AI application to Run on Multiple Models to Ensure Resilience and Compliance","json":"/content/devtoberfest-2026-ai21-multiple-models.json"},{"ref":"content:what-an-ai-infra-engineer-sees-when-opening-sap-s-ai-stack-1-3-the-model-gateway","name":"What an AI infra engineer sees when opening SAP's AI stack (1/3): the model gateway","json":"/content/what-an-ai-infra-engineer-sees-when-opening-sap-s-ai-stack-1-3-the-model-gateway.json"},{"ref":"content:devtoberfest-2026-ai-in-abap-with-islm","name":"🟣 Bring AI into Your ABAP Applications with ISLM: Build, Integrate, and Consume AI Natively","json":"/content/devtoberfest-2026-ai-in-abap-with-islm.json"},{"ref":"content:ui5-ai-features-library-is-now-an-npm-package","name":"UI5 AI Features library is now an npm Package","json":"/content/ui5-ai-features-library-is-now-an-npm-package.json"},{"ref":"content:build-your-ai-agent-prototype-for-free-using-sap-cap-langchain-and-ollama-cloud","name":"Build Your AI Agent prototype for free using SAP CAP, LangChain and Ollama cloud","json":"/content/build-your-ai-agent-prototype-for-free-using-sap-cap-langchain-and-ollama-cloud.json"},{"ref":"content:connecting-sap-integration-suite-with-sap-document-ai-and-sap-business-ai","name":"Connecting SAP Integration Suite with SAP Document AI and SAP Business AI","json":"/content/connecting-sap-integration-suite-with-sap-document-ai-and-sap-business-ai.json"},{"ref":"content:cap-in-the-age-of-ai-3-from-mcp-to-a2a","name":"CAP in the age of AI #3 - from MCP to A2A","json":"/content/cap-in-the-age-of-ai-3-from-mcp-to-a2a.json"},{"ref":"content:building-a-pro-code-agent-on-sap-btp-part-2-the-agent-langgraph-genai-hub","name":"Building a Pro-Code Agent on SAP BTP — Part 2: The Agent (LangGraph + GenAI Hub)","json":"/content/building-a-pro-code-agent-on-sap-btp-part-2-the-agent-langgraph-genai-hub.json"},{"ref":"content:autonomous-diagnostics-on-kyma-unplugged-goose-litellm-kro-sap-ai-core-in-produc","name":"Autonomous Diagnostics on Kyma Unplugged: Goose + LiteLLM + KRO + SAP AI Core in Production","json":"/content/autonomous-diagnostics-on-kyma-unplugged-goose-litellm-kro-sap-ai-core-in-produc.json"},{"ref":"content:natural-language-queries-for-sap-cap-via-mcp","name":"Natural Language Queries for SAP CAP via MCP: The LLM Translates, CDS Executes","json":"/content/natural-language-queries-for-sap-cap-via-mcp.json"},{"ref":"content:banking-sentinel-a-multi-agent-credit-risk-copilot","name":"Banking Sentinel: A Multi-Agent Credit-Risk Copilot on SAP BTP, Built on a Mixed AI Stack","json":"/content/banking-sentinel-a-multi-agent-credit-risk-copilot.json"},{"ref":"content:beyond-basic-ai-error-handling-in-sap-cpi-a-rules-first-architecture-with-hana-c","name":"Beyond Basic AI Error Handling in SAP CPI - A Rules-First Architecture with HANA Cloud Learning","json":"/content/beyond-basic-ai-error-handling-in-sap-cpi-a-rules-first-architecture-with-hana-c.json"},{"ref":"content:building-an-llm-agent-in-cap-java-with-spring-ai","name":"Building an LLM Agent in CAP Java with Spring AI","json":"/content/building-an-llm-agent-in-cap-java-with-spring-ai.json"},{"ref":"content:calling-claude-from-abap-how-i-wired-sap-ai-core-into-a-real-business-scenario","name":"Calling Claude from ABAP: How I Wired SAP AI Core into a Real Business Scenario","json":"/content/calling-claude-from-abap-how-i-wired-sap-ai-core-into-a-real-business-scenario.json"},{"ref":"content:building-an-llm-agent-using-cap","name":"Building an LLM Agent using CAP","json":"/content/building-an-llm-agent-using-cap.json"},{"ref":"content:mj-live-an-ai-cognitive-pipeline-on-cap-hana-and-solace","name":"Michael Jackson: AI Cognitive Pipeline on SAP BTP, SAP CAP, ElevenLabs, Claude, HANA DB, Solace","json":"/content/mj-live-an-ai-cognitive-pipeline-on-cap-hana-and-solace.json"},{"ref":"content:agentic-ai-on-btp-a-multi-agent-app-with-pydantic-ai","name":"Agentic AI on BTP: a Multi‑Agent App with Pydantic AI","json":"/content/agentic-ai-on-btp-a-multi-agent-app-with-pydantic-ai.json"},{"ref":"content:agentic-ai-on-btp-a-single-agent-with-langgraph","name":"Agentic AI on BTP: a Single Agent with LangGraph","json":"/content/agentic-ai-on-btp-a-single-agent-with-langgraph.json"},{"ref":"content:ai-powered-user-experience-with-sap-cap-ai","name":"Enhancing Enterprise Applications: AI-powered User Experience with SAP CAP AI Plugin","json":"/content/ai-powered-user-experience-with-sap-cap-ai.json"},{"ref":"content:what-happens-to-your-data-when-you-enable-sap-s-ai-features","name":"What Happens to Your Data When You Enable SAP's AI Features?","json":"/content/what-happens-to-your-data-when-you-enable-sap-s-ai-features.json"},{"ref":"content:integrating-a-custom-ai-model-into-cap-using-ai-launchpad","name":"Integrating a Custom AI Model into SAP CAP Using AI Launchpad","json":"/content/integrating-a-custom-ai-model-into-cap-using-ai-launchpad.json"},{"ref":"content:sap-integration-suite-intelligent-integration-with-ai-adapter","name":"SAP Integration Suite: Intelligent Integration with AI Adapter","json":"/content/sap-integration-suite-intelligent-integration-with-ai-adapter.json"},{"ref":"content:cds-toon-ai-protocol-adapter-cutting-token-costs","name":"cds-toon-ai-protocol-adapter: a pragmatic way to cut AI token costs using SAP CAP","json":"/content/cds-toon-ai-protocol-adapter-cutting-token-costs.json"},{"ref":"content:ui5-mcp-server-got-extended-for-ui-integration-cards-generation","name":"UI5 MCP Server Got Extended for UI Integration Cards Generation","json":"/content/ui5-mcp-server-got-extended-for-ui-integration-cards-generation.json"},{"ref":"content:enhancing-business-processes-with-sap-btp-ai-in-sap-integration-suite","name":"Enhancing Business Processes with SAP BTP AI in SAP Integration Suite","json":"/content/enhancing-business-processes-with-sap-btp-ai-in-sap-integration-suite.json"},{"ref":"content:prompt-driven-development-building-full-stack-cap-apps-from-user-stories","name":"Prompt-Driven Development: Building Full-Stack SAP CAP Apps from User Stories","json":"/content/prompt-driven-development-building-full-stack-cap-apps-from-user-stories.json"},{"ref":"content:streaming-llm-output-with-cap-and-websockets","name":"Streaming LLM Output with CAP and WebSockets","json":"/content/streaming-llm-output-with-cap-and-websockets.json"},{"ref":"content:how-to-reduce-prompt-token-costs-using-toon","name":"How to Reduce Prompt Token Costs Using Toon = Save Money","json":"/content/how-to-reduce-prompt-token-costs-using-toon.json"},{"ref":"content:ac-generative-ai-on-sap-btp","name":"Generative AI on SAP BTP","json":"/content/ac-generative-ai-on-sap-btp.json"},{"ref":"content:using-cloud-sdk-for-ai-in-a-commonjs-cap-project","name":"How to use Cloud SDK for AI in an existing CAP NodeJS Project in CommonJS","json":"/content/using-cloud-sdk-for-ai-in-a-commonjs-cap-project.json"},{"ref":"content:improving-exception-handling-using-generative-ai-in-sap-cloud-integration-sap-ci","name":"Improving Exception Handling using Generative AI in SAP Cloud Integration (SAP CI/CPI)","json":"/content/improving-exception-handling-using-generative-ai-in-sap-cloud-integration-sap-ci.json"},{"ref":"content:talk-to-the-database-cap-and-sqlite-with-gemini","name":"Lets Talk to the Database - CAP & SQLite Powered by Google Gemini-2.5-Pro","json":"/content/talk-to-the-database-cap-and-sqlite-with-gemini.json"},{"ref":"content:out-of-the-box-document-grounding-in-sap-ai-core-rag-with-sap-help-portal","name":"Out-of-the-Box Document Grounding in SAP AI Core: RAG with SAP Help Portal","json":"/content/out-of-the-box-document-grounding-in-sap-ai-core-rag-with-sap-help-portal.json"},{"ref":"content:elevating-data-privacy-in-cap-genai-applications-with-cap-llm-plugin","name":"Elevating Data Privacy in SAP CAP based GenAI Applications with CAP LLM Plugin","json":"/content/elevating-data-privacy-in-cap-genai-applications-with-cap-llm-plugin.json"},{"ref":"content:an-innovative-language-exchange-app-with-build-apps-cap-kyma-and-openai","name":"An Innovative Language Exchange App developed with SAP Build Apps, CAP, Kyma, and OpenAI","json":"/content/an-innovative-language-exchange-app-with-build-apps-cap-kyma-and-openai.json"},{"ref":"content:genai-mail-insights-generative-ai-hub-for-customer-support","name":"GenAI Mail Insights - Leveraging the generative AI hub in SAP AI Core to improve customer support","json":"/content/genai-mail-insights-generative-ai-hub-for-customer-support.json"},{"ref":"content:automate-your-job-postings-using-generative-ai-and-sbpa","name":"Automate your Job Postings Using Generative AI (ChatGPT) & SAP Build Process Automation Apps","json":"/content/automate-your-job-postings-using-generative-ai-and-sbpa.json"},{"ref":"content:creating-a-meal-generator-application-with-sap-build-and-cap","name":"Creating a meal generator application with SAP Build, Cloud Application Programming and openAI","json":"/content/creating-a-meal-generator-application-with-sap-build-and-cap.json"},{"ref":"content:empowering-your-data-analytics-with-gpt-3-and-sap-cap-integration","name":"Empowering Your Data Analytics with GPT-3 and SAP CAP Integration","json":"/content/empowering-your-data-analytics-with-gpt-3-and-sap-cap-integration.json"},{"ref":"content:a-chatgpt-like-chat-app-with-cap-and-sapui5-part-3","name":"A ChatGPT-like chat app built with modern SAP technologies (CAP, SAPUI5) – Part 3/3","json":"/content/a-chatgpt-like-chat-app-with-cap-and-sapui5-part-3.json"},{"ref":"content:a-chatgpt-like-chat-app-with-cap-and-sapui5-part-2","name":"A ChatGPT-like chat app built with modern SAP technologies (CAP, SAPUI5) – Part 2/3","json":"/content/a-chatgpt-like-chat-app-with-cap-and-sapui5-part-2.json"},{"ref":"content:a-chatgpt-like-chat-app-with-cap-and-sapui5-part-1","name":"A ChatGPT-like chat app built with modern SAP technologies (CAP, SAPUI5) – Part 1/3","json":"/content/a-chatgpt-like-chat-app-with-cap-and-sapui5-part-1.json"},{"ref":"content:btp-ai-bp-access-to-generative-ai-models","name":"Access to Generative AI Models","json":"/content/btp-ai-bp-access-to-generative-ai-models.json"},{"ref":"content:devtoberfest-2026-aba-44-abap-ai-sdk-islm","name":"ABAP AI SDK powered by ISLM - How to implement your own AI use cases in ABAP","json":"/content/devtoberfest-2026-aba-44-abap-ai-sdk-islm.json"},{"ref":"content:teched-2026-ad262","name":"Agentic CAP: Build MCP servers and enterprise AI agents","json":"/content/teched-2026-ad262.json"},{"ref":"content:teched-2026-ct1168","name":"AI-enabled administration: Automating log analysis with generative AI hub","json":"/content/teched-2026-ct1168.json"},{"ref":"content:teched-2026-ct1238","name":"Stop guessing, start counting: How generative AI fixed an inventory mess","json":"/content/teched-2026-ct1238.json"}],"normative_context":[{"ref":"instrument:sap-developer-license-3-2-cap","name":"SAP Developer License Agreement","json":"/instruments/sap-developer-license-3-2-cap.json","prominence":"contextual","sections":["3"]}]}}