Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
cc95d8a
Initial commit
May 5, 2026
f415779
feat: initialize CAP bookshop sample application
samyuktaprabhu May 6, 2026
7b3a000
Merge pull request #1 from I560666/sam-add-sample-app
May 6, 2026
8282df1
add plugin scaffold
samyuktaprabhu May 6, 2026
50a118e
update plugin scaffold
samyuktaprabhu May 7, 2026
b100138
Merge pull request #2 from I560666/sam-setup-plugin-initial
May 12, 2026
bb0a871
enable attachments
samyuktaprabhu May 13, 2026
f4173e0
enable attachments
samyuktaprabhu May 13, 2026
5e82b23
setup orchestrator
samyuktaprabhu May 20, 2026
f25bd3b
rename handler and update to junit 5
samyuktaprabhu May 20, 2026
a7ea29d
initial Extraction Orchestrator setup
samyuktaprabhu May 21, 2026
a37e5fd
async process :)
samyuktaprabhu May 21, 2026
055a659
add tests
samyuktaprabhu May 21, 2026
e8e1ee9
bounded thread pool
samyuktaprabhu May 21, 2026
84034c6
review fixes
samyuktaprabhu May 27, 2026
024c9e3
Merge pull request #3 from I560666/sam-embed-attachments-plugin
May 27, 2026
b8bb7a3
Merge remote-tracking branch 'origin/main' into sam-2753-orchestrator…
samyuktaprabhu May 27, 2026
8a3e5f3
revert unintended change
samyuktaprabhu May 27, 2026
7dd4e78
review fixes
samyuktaprabhu May 27, 2026
5ee9f67
review fixes
samyuktaprabhu May 27, 2026
8319198
make the working directory path absolute
samyuktaprabhu May 28, 2026
6548596
Merge pull request #4 from I560666/sam-2753-orchestrator-setup
May 29, 2026
d54be4a
enable attachments
samyuktaprabhu May 13, 2026
aaba381
attachment content retrieval
samyuktaprabhu May 22, 2026
41c2215
clean up
samyuktaprabhu May 29, 2026
8ddf50c
tiny improvements / comments
samyuktaprabhu May 29, 2026
8d184b9
Merge pull request #5 from I560666/sam-2758-attachment-retrieval
Jun 1, 2026
af28906
chore(hyperspace): 🤖 Add PR Bot Configuration
hyperspace-insights[bot] Jun 1, 2026
633786c
Create main.yml
samyuktaprabhu Jun 1, 2026
5b45f7b
Merge pull request #3 from cap-java/sam-ci-workflow-2
samyuktaprabhu Jun 2, 2026
7e51fb3
Merge pull request #2 from cap-java/pr-bot/configuration
samyuktaprabhu Jun 2, 2026
bf05af0
initial commit
samyuktaprabhu Jun 2, 2026
b3bd2b0
credential handling using service binding and running using local hyb…
samyuktaprabhu Jun 2, 2026
b82ba7e
update pom.xml
samyuktaprabhu Jun 2, 2026
9893929
tests
samyuktaprabhu Jun 2, 2026
f8d1292
bot review fixes
samyuktaprabhu Jun 2, 2026
f2e8779
apply spotless
samyuktaprabhu Jun 2, 2026
8092bfe
skip extraction early when Document AI service is unavailable
samyuktaprabhu Jun 2, 2026
e9633e6
Merge pull request #5 from cap-java/sam-2759-credential-handling-2
samyuktaprabhu Jun 5, 2026
884ac94
custom flows :)
samyuktaprabhu Jun 5, 2026
387d22c
remove sonar code
samyuktaprabhu Jun 5, 2026
522bb6a
remove threads
samyuktaprabhu Jun 5, 2026
76eaec3
bot review fixes
samyuktaprabhu Jun 5, 2026
b0e8b95
bot review fixes
samyuktaprabhu Jun 5, 2026
cfeddbb
review fixes - I
samyuktaprabhu Jun 10, 2026
00c7e03
review fixes - II
samyuktaprabhu Jun 10, 2026
ac70dac
review fixes - III
samyuktaprabhu Jun 10, 2026
c1fa3e2
initial commit
samyuktaprabhu Jun 10, 2026
7adc9f5
Merge pull request #7 from cap-java/sam-2772-flows
rjayasinghe Jun 10, 2026
81c816f
fix: review fixes
samyuktaprabhu Jun 18, 2026
b27bfc5
refactor: use outbox
samyuktaprabhu Jun 22, 2026
73950e3
feat: add standalone document upload entry point via Jobs media entity
samyuktaprabhu Jun 11, 2026
c9b4bf1
refactor: remove attachments plugin entry point
samyuktaprabhu Jun 23, 2026
20cdcd8
refactor: rename registration files / classes
samyuktaprabhu Jun 23, 2026
af74107
feat: implement programmatic way of using the plugin
samyuktaprabhu Jun 24, 2026
7a9f33f
fix: review fixes
samyuktaprabhu Jun 24, 2026
7f77947
Merge pull request #8 from cap-java/sam-2762-document-submission
rjayasinghe Jun 25, 2026
c7c1d81
Merge pull request #9 from cap-java/doc-ai-2801-feature/multiple-entr…
rjayasinghe Jun 25, 2026
b9eba42
feat: outbox + scheduler + results
samyuktaprabhu Jun 25, 2026
eef72dc
fix: review fix
samyuktaprabhu Jun 29, 2026
feb5c35
fix: fix: use wildcard ServiceName for DocumentExtractionResult handl…
samyuktaprabhu Jun 29, 2026
bb6404a
chore: update the cds version to LTS
samyuktaprabhu Jun 29, 2026
c59bec2
Merge pull request #11 from cap-java/doc-ai-2773-feature/outbox-sched…
samyuktaprabhu Jun 29, 2026
6e51cb5
docs: add javadcos to classes and methods
samyuktaprabhu Jun 29, 2026
9dd3cbd
fix: review fix
samyuktaprabhu Jun 29, 2026
5b9bc67
docs: write documentation about the plugin
samyuktaprabhu Jun 29, 2026
2955ec3
feat: make polling intervals dynamic
samyuktaprabhu Jun 29, 2026
a4dbff4
Merge pull request #12 from cap-java/doc-ai-2752-docs/javadcos
samyuktaprabhu Jun 30, 2026
d9214af
refactor: rename all packages to com.sap.cds.feature.documentai.* + e…
samyuktaprabhu Jun 30, 2026
150b3aa
docs: remove integration tests from documentation
samyuktaprabhu Jun 30, 2026
9d7e77e
Merge pull request #13 from cap-java/doc-ai-2775-docs/document-ai-plu…
samyuktaprabhu Jun 30, 2026
0f9890f
docs: remove integration tests from documentation
samyuktaprabhu Jun 30, 2026
5ca94da
chore: apply spotless
samyuktaprabhu Jun 30, 2026
f649e0c
Merge pull request #14 from cap-java/doc-ai-2752-refactor/tiny-enhanc…
samyuktaprabhu Jun 30, 2026
eab5d39
tests: add integration tests
samyuktaprabhu Jun 30, 2026
475ca01
fix: review fixes
samyuktaprabhu Jul 1, 2026
7bb95f5
Merge pull request #15 from cap-java/doc-ai-2840-tests/integration-tests
samyuktaprabhu Jul 1, 2026
1c13566
Add 'cds-feature-sap-document-ai/' from commit '7bb95f5cdc5b32cc7e787…
Schmarvinius Jul 3, 2026
6da248d
refactor(document-ai): reorganize imported tree into cds-ai layout
Schmarvinius Jul 3, 2026
53b6524
chore(document-ai): remove duplicated and obsolete imported files
Schmarvinius Jul 3, 2026
e06f346
refactor(document-ai): adapt plugin pom to cds-ai conventions
Schmarvinius Jul 3, 2026
28ac763
refactor(document-ai): normalize license headers and plugin name refe…
Schmarvinius Jul 3, 2026
9547d98
chore(document-ai): wire plugin, integration tests and sample into re…
Schmarvinius Jul 3, 2026
c2ed8e2
fix(document-ai): resolve missing dependency version and CI-friendly …
Schmarvinius Jul 3, 2026
bbfa500
style: apply spotless across the reactor
Schmarvinius Jul 3, 2026
b4913cd
ci: preinstall cds-feature-sap-document-ai for integration tests
Schmarvinius Jul 3, 2026
a31d322
fix(mtx-local): pin @sap/cds ^9 at workspace root to prevent duplicat…
Schmarvinius Jul 3, 2026
e270483
adapt readme
Schmarvinius Jul 3, 2026
1af4b0b
chore(document-ai): note deferred inclusion in cds-starter-ai
Schmarvinius Jul 6, 2026
6f700ce
refactor(samples): consolidate document-ai-bookshop into samples/book…
Schmarvinius Jul 6, 2026
63f184d
chore(coverage): include cds-feature-sap-document-ai in aggregated re…
Schmarvinius Jul 6, 2026
f74cc7c
chore(coverage): remove no-op JaCoCo check executions
Schmarvinius Jul 6, 2026
1795a0a
docs: update root README for cds-feature-sap-document-ai
Schmarvinius Jul 6, 2026
4579e9e
refactor(samples): give recommendations and document-ai each their ow…
Schmarvinius Jul 6, 2026
4c6f8b1
refactor(samples): simplify use case
Schmarvinius Jul 6, 2026
8553aec
simplify and spotless
Schmarvinius Jul 6, 2026
5fc3d36
latest cahgnes from upstream
Schmarvinius Jul 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/actions/integration-tests/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ runs:
maven-version: ${{ inputs.maven-version }}

- name: Build dependencies for integration tests
run: mvn clean install -ntp -B -pl cds-feature-ai-core,cds-feature-recommendations,cds-starter-ai -am -DskipTests
run: mvn clean install -ntp -B -pl cds-feature-ai-core,cds-feature-recommendations,cds-feature-sap-document-ai,cds-starter-ai -am -DskipTests
shell: bash

- name: Integration Tests (spring)
Expand Down
26 changes: 9 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ This repository contains a collection of AI plugins for [CAP Java](https://cap.c

### Plugins

| Module | Description |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| [`cds-feature-ai-core`](cds-feature-ai-core/README.md) | Bridges CAP Java to SAP AI Core - resource group management, deployment lifecycle, configuration CRUD, and prediction API |
| [`cds-feature-recommendations`](cds-feature-recommendations/README.md) | AI-powered field recommendations for Fiori UIs in draft-enabled entities |
| Module | Description |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| [`cds-feature-ai-core`](cds-feature-ai-core/README.md) | Bridges CAP Java to SAP AI Core - resource group management, deployment lifecycle, configuration CRUD, and prediction API |
| [`cds-feature-recommendations`](cds-feature-recommendations/README.md) | AI-powered field recommendations for Fiori UIs in draft-enabled entities |
| [`cds-feature-sap-document-ai`](cds-feature-sap-document-ai/README.md) | SAP Document AI integration for asynchronous document information extraction via the DIE service |

### Starter

Expand All @@ -31,6 +32,8 @@ For the simplest setup, add the **`cds-starter-ai`** dependency which bundles bo
}
```

> Note: [`cds-feature-sap-document-ai`](cds-feature-sap-document-ai/README.md) is not part of `cds-starter-ai` yet - it will be added once the plugin supports multi-tenancy. Add it as an explicit dependency in your application if you need it today.

## Prerequisites

- Java 17+
Expand All @@ -42,13 +45,7 @@ Without an AI Core binding the plugins fall back to mock implementations for loc

## Samples

In [`samples/bookshop`](samples/bookshop) you can find a complete CAP Java bookshop demonstrating both plugins:

```bash
mvn clean install
cd samples/bookshop
mvn spring-boot:run
```
A runnable CAP Java bookshop demonstrating all plugins together lives in [`samples/bookshop`](samples/bookshop). It provides an `AdminService` showcasing recommendations on draft-enabled Books, and a `SupplierInvoicesService` showcasing document extraction from supplier invoices. See the sample's own instructions for how to run it.

## Local Development

Expand All @@ -57,12 +54,7 @@ mvn clean install # build all modules
mvn test # run unit tests
```

For integration tests against a real AI Core instance:

```bash
cds bind ai-core -2 <your-ai-core-service-instance>
cds bind --exec mvn test -pl integration-tests/spring -am
```
For per-plugin details (configuration, programmatic API, multi-tenancy behaviour) see the individual module READMEs. For integration tests against a real AI Core instance see [`integration-tests/spring`](integration-tests/spring).

## Support, Feedback, Contributing

Expand Down
4 changes: 4 additions & 0 deletions cds-feature-ai-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,3 +107,7 @@ clients (for example `RptInferenceClient` from `cds-feature-recommendations`).

- [SAP AI Core Documentation](https://help.sap.com/docs/sap-ai-core)
- [SAP AI SDK for Java](https://github.com/SAP/ai-sdk-java)

## Sample

A runnable CAP Java sample demonstrating the AI plugins (which depend on this module) lives at [`samples/bookshop`](../samples/bookshop).
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,12 @@ public void onInferenceClient(InferenceClientContext context) {
"Inference client is not available without an AI Core service binding");
}

/** Resolves (or creates) the resource group name for the given tenant using the configured prefix. */
/**
* Resolves (or creates) the resource group name for the given tenant using the configured prefix.
*/
public String resolveResourceGroup(String tenantId) {
return tenantResourceGroupCache.computeIfAbsent(tenantId, id -> config.resourceGroupPrefix() + id);
return tenantResourceGroupCache.computeIfAbsent(
tenantId, id -> config.resourceGroupPrefix() + id);
}

/** Returns the mock tenant cache for test inspection. */
Expand Down
4 changes: 4 additions & 0 deletions cds-feature-recommendations/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -223,3 +223,7 @@ Without an AI Core binding, the plugin uses a `MockAIClient` that returns random

- [`cds-feature-ai-core`](../cds-feature-ai-core/README.md) - Required dependency for AI Core connectivity
- [SAP Fiori Elements - Intelligent Suggestions](https://experience.sap.com/fiori-design-web/)

## Sample

A runnable CAP Java sample demonstrating this plugin lives at [`samples/bookshop`](../samples/bookshop). The `AdminService.Books` entity is draft-enabled with value-list fields (genre, author) - when editing a book draft, the plugin suggests values based on the existing catalog.
Loading
Loading