From sap-cloud-sdk-ai
Integrates SAP Cloud SDK for AI into JavaScript/TypeScript and Java apps for chat completion, embeddings, streaming, function calling, content filtering, data masking, document grounding, and LangChain/Spring AI with SAP AI Core, Generative AI Hub, or Orchestration Service.
npx claudepluginhub secondsky/sap-skills --plugin sap-cloud-sdk-aiThis skill uses the workspace's default tool permissions.
The official SDK for SAP AI Core, SAP Generative AI Hub, and Orchestration Service.
Generates design tokens/docs from CSS/Tailwind/styled-components codebases, audits visual consistency across 10 dimensions, detects AI slop in UI.
Records polished WebM UI demo videos of web apps using Playwright with cursor overlay, natural pacing, and three-phase scripting. Activates for demo, walkthrough, screen recording, or tutorial requests.
Delivers idiomatic Kotlin patterns for null safety, immutability, sealed classes, coroutines, Flows, extensions, DSL builders, and Gradle DSL. Use when writing, reviewing, refactoring, or designing Kotlin code.
The official SDK for SAP AI Core, SAP Generative AI Hub, and Orchestration Service.
Use this skill when:
Note: This skill uses SAP Cloud SDK for AI v2.2.0+. If you're migrating from v1.x, see V1 to V2 Migration Guide for breaking changes.
npm install @sap-ai-sdk/orchestration@^2
import { OrchestrationClient } from '@sap-ai-sdk/orchestration';
const client = new OrchestrationClient({
promptTemplating: {
model: { name: 'gpt-4o' },
prompt: [{ role: 'user', content: '{{?question}}' }]
}
});
const response = await client.chatCompletion({
placeholderValues: { question: 'What is SAP?' }
});
console.log(response.getContent());
<dependency>
<groupId>com.sap.ai.sdk</groupId>
<artifactId>orchestration</artifactId>
<version>${ai-sdk.version}</version>
</dependency>
var client = new OrchestrationClient();
var config = new OrchestrationModuleConfig()
.withLlmConfig(OrchestrationAiModel.GPT_4O);
var prompt = new OrchestrationPrompt("What is SAP?");
var result = client.chatCompletion(prompt, config);
System.out.println(result.getContent());
Bind AI Core service instance to your application. SDK auto-detects via VCAP_SERVICES or mounted secrets.
Set environment variable:
export AICORE_SERVICE_KEY='{"clientid":"...","clientsecret":"...","url":"...","serviceurls":{"AI_API_URL":"..."}}'
Or use CAP hybrid mode:
# JavaScript
cds bind -2 <AICORE_INSTANCE> && cds-tsx watch --profile hybrid
# Java
cds bind --to aicore --exec mvn spring-boot:run
For detailed connection options, see references/connecting-to-ai-core.md
| Package | Purpose |
|---|---|
@sap-ai-sdk/orchestration | Chat completion, filtering, grounding |
@sap-ai-sdk/foundation-models | Direct model access (OpenAI) |
@sap-ai-sdk/langchain | LangChain integration |
@sap-ai-sdk/ai-api | Deployments, artifacts, configurations |
@sap-ai-sdk/document-grounding | Pipeline, Vector, Retrieval APIs |
@sap-ai-sdk/prompt-registry | Prompt template management |
| Artifact | Purpose |
|---|---|
orchestration | Chat completion, filtering, grounding |
openai (foundationmodels) | Direct OpenAI model access |
core | Base connectivity |
document-grounding | Pipeline, Vector, Retrieval APIs |
prompt-registry | Prompt template management |
| Deprecated | Use Instead |
|---|---|
| text-embedding-ada-002 | text-embedding-3-small/large |
| gpt-35-turbo (all variants) | gpt-4o-mini |
| gpt-4-32k | gpt-4o |
| gpt-4 (base) | gpt-4o or gpt-4.1 |
| gemini-1.0-pro | gemini-2.0-flash |
| gemini-1.5-pro/flash | gemini-2.5-flash |
| mistralai--mixtral-8x7b | mistralai--mistral-small-instruct |
// JavaScript
const stream = client.stream({
placeholderValues: { question: 'Explain SAP CAP' }
});
for await (const chunk of stream.toContentStream()) {
process.stdout.write(chunk);
}
// Java
client.streamChatCompletion(prompt, config)
.forEach(chunk -> System.out.print(chunk.getDeltaContent()));
// JavaScript
const tools = [{
type: 'function',
function: {
name: 'get_weather',
parameters: { type: 'object', properties: { city: { type: 'string' } } }
}
}];
const response = await client.chatCompletion({
placeholderValues: { question: 'Weather in Berlin?' }
}, { tools });
const toolCalls = response.getToolCalls();
// JavaScript
import { buildAzureContentSafetyFilter } from '@sap-ai-sdk/orchestration';
const client = new OrchestrationClient({
promptTemplating: { model: { name: 'gpt-4o' } },
filtering: {
input: buildAzureContentSafetyFilter({ Hate: 'ALLOW_SAFE' }),
output: buildAzureContentSafetyFilter({ Violence: 'ALLOW_SAFE' })
}
});
// JavaScript
const client = new OrchestrationClient({
promptTemplating: { model: { name: 'gpt-4o' } },
masking: {
masking_providers: [{
type: 'sap_data_privacy_integration',
method: 'anonymization',
entities: [{ type: 'profile-email' }, { type: 'profile-person' }]
}]
}
});
// JavaScript
const client = new OrchestrationClient({
promptTemplating: { model: { name: 'gpt-4o' } },
grounding: {
grounding_input: ['{{?question}}'],
grounding_output: ['{{?context}}'],
data_repositories: [{ type: 'vector', id: 'my-repo-id' }]
}
});
JavaScript SDK provides helper methods:
const response = await client.chatCompletion({ placeholderValues });
response.getContent(); // Model output string
response.getTokenUsage(); // { prompt_tokens, completion_tokens, total_tokens }
response.getFinishReason(); // 'stop', 'length', 'tool_calls', etc.
response.getToolCalls(); // Array of function calls
response.getDeltaToolCalls(); // Partial tool calls (streaming)
response.getAllMessages(); // Full message history
response.getAssistantMessage(); // Assistant response only
response.getRefusal(); // Refusal message if blocked
Streaming response methods:
const stream = client.stream({ placeholderValues });
for await (const chunk of stream.toContentStream()) {
process.stdout.write(chunk);
}
// After stream ends:
stream.getFinishReason();
stream.getTokenUsage();
For detailed guidance:
references/orchestration-guide.mdreferences/foundation-models-guide.mdreferences/langchain-guide.mdreferences/spring-ai-guide.mdreferences/ai-core-api-guide.mdreferences/foundation-models-guide.md - Foundation models and pricingreferences/ai-core-api-guide.md - AI Core service API referencereferences/orchestration-guide.md - Orchestration service guidereferences/langchain-guide.md - LangChain.js integrationreferences/spring-ai-guide.md - Spring AI integrationreferences/agentic-workflows.md - Agentic workflow patternsreferences/connecting-to-ai-core.md - Connection setup guidereferences/error-handling.md - Error handling patternsreferences/v1-to-v2-migration.md - V1 to V2 migration guide| SDK | Current Version | Node/Java Requirement |
|---|---|---|
| JavaScript | 2.2.0+ | Node.js 20+ |
| Java | 1.13.0 (Core) / 1.12.0 (Latest orchestration) | Java 17+ (21 LTS recommended) |
Note: Generated model classes (in ...model packages) may change in minor releases but are safe to use.
| Error | Cause | Solution |
|---|---|---|
| "Could not find service bindings for 'aicore'" | Missing AI Core binding | Bind AI Core service or set AICORE_SERVICE_KEY |
| "Orchestration deployment not found" | No deployment in resource group | Deploy orchestration in AI Core or use different resource group |
| Content filter violation | Input/output blocked | Adjust filter thresholds or modify content |
| Token limit exceeded | Response too long | Set max_tokens parameter |
Keep this skill updated using these sources: