All skills
secondsky avatar

/sap-cloud-sdk-ai

@620a19a
by Eddiesecondsky/sap-skills456 stars
120

Integrates SAP Cloud SDK for AI into JavaScript/TypeScript and Java applications. Use when building applications with SAP AI Core, Generative AI Hub, or Orchestration Service. Covers chat completion, embedding, streaming, function calling, content filtering, data masking, document grounding, prompt registry, and LangChain/Spring AI integration. Supports OpenAI GPT-4o, Llama, Gemini, Amazon Nova, and other foundation models via SAP BTP.

Use this Skill: https://skilld.dev/gh/secondsky/sap-skills/sap-cloud-sdk-ai

This session only. Nothing lands on disk.

referencesai-core-api-guide.md

≈3.3k tokens on demand. Your agent reads this file only when SKILL.md points to it.

AI Core API Guide

Guide for managing SAP AI Core resources using SAP Cloud SDK for AI.

Table of Contents

  1. Overview
  2. Installation
  3. AI API Package
  4. Document Grounding
  5. Prompt Registry
  6. Deployment Management
  7. Custom Destinations

Overview

The AI Core APIs provide programmatic access to manage:

  • Deployments: Create, start, stop, delete model deployments
  • Artifacts: Register datasets and models
  • Configurations: Define execution parameters
  • Document Grounding: Manage vector stores and pipelines
  • Prompt Registry: Create and manage prompt templates

Installation

JavaScript/TypeScript

npm install @sap-ai-sdk/ai-api
npm install @sap-ai-sdk/document-grounding
npm install @sap-ai-sdk/prompt-registry

Important: Use tilde (~) version ranges instead of caret (^) as these packages contain generated code that may have breaking changes:

{
  "dependencies": {
    "@sap-ai-sdk/ai-api": "~2.11.0",
    "@sap-ai-sdk/document-grounding": "~2.11.0",
    "@sap-ai-sdk/prompt-registry": "~2.11.0"
  }
}

Java (Maven)

<dependency>
  <groupId>com.sap.ai.sdk</groupId>
  <artifactId>core</artifactId>
  <version>${ai-sdk.version}</version>
</dependency>
<dependency>
  <groupId>com.sap.ai.sdk</groupId>
  <artifactId>document-grounding</artifactId>
  <version>${ai-sdk.version}</version>
</dependency>
<dependency>
  <groupId>com.sap.ai.sdk</groupId>
  <artifactId>prompt-registry</artifactId>
  <version>${ai-sdk.version}</version>
</dependency>

AI API Package

Create Artifact

import { ArtifactApi } from '@sap-ai-sdk/ai-api';

const artifact = await ArtifactApi.artifactCreate(
  {
    name: 'my-dataset',
    kind: 'dataset',
    url: 's3://bucket/path/to/data',
    scenarioId: 'my-scenario'
  },
  { 'AI-Resource-Group': 'default' }
).execute();

console.log('Artifact ID:', artifact.id);

Create Configuration

import { ConfigurationApi } from '@sap-ai-sdk/ai-api';

const config = await ConfigurationApi.configurationCreate(
  {
    name: 'my-config',
    executableId: 'my-executable',
    scenarioId: 'my-scenario',
    parameterBindings: [
      { key: 'learning_rate', value: '0.001' }
    ],
    inputArtifactBindings: [
      { key: 'training_data', artifactId: 'artifact-id' }
    ]
  },
  { 'AI-Resource-Group': 'default' }
).execute();

Create Deployment

import { DeploymentApi } from '@sap-ai-sdk/ai-api';

const deployment = await DeploymentApi.deploymentCreate(
  { configurationId: config.id },
  { 'AI-Resource-Group': 'default' }
).execute();

console.log('Deployment ID:', deployment.id);
console.log('Status:', deployment.status);

Modify and Delete Deployment

// Stop deployment (only RUNNING can be stopped)
await DeploymentApi.deploymentModify(
  deployment.id,
  { targetStatus: 'STOPPED' },
  { 'AI-Resource-Group': 'default' }
).execute();

// Delete deployment (only STOPPED or UNKNOWN can be deleted)
await DeploymentApi.deploymentDelete(
  deployment.id,
  { 'AI-Resource-Group': 'default' }
).execute();

Query Deployments

// Query deployments with filters
const deployments = await DeploymentApi.deploymentQuery(
  {
    status: 'RUNNING',
    scenarioId: 'orchestration'
  },
  { 'AI-Resource-Group': 'default' }
).execute();

for (const deployment of deployments.resources) {
  console.log(`ID: ${deployment.id}, Status: ${deployment.status}`);
}

Resolve Deployment URL

import { resolveDeploymentUrl } from '@sap-ai-sdk/ai-api';

const url = await resolveDeploymentUrl({
  scenarioId: 'orchestration',
  modelName: 'gpt-4o'
});

console.log('Deployment URL:', url);

Document Grounding

Prerequisites

Custom resource groups require the label document-grounding: true:

// Via AI Launchpad UI or AI API
await ResourceGroupApi.resourceGroupModify(
  'my-resource-group',
  { labels: [{ key: 'document-grounding', value: 'true' }] }
).execute();

Pipeline API

import { PipelinesApi } from '@sap-ai-sdk/document-grounding';

// List pipelines
const pipelines = await PipelinesApi.listPipelines({
  'AI-Resource-Group': 'default'
}).execute();

// Create SharePoint pipeline
const pipeline = await PipelinesApi.createPipeline(
  {
    type: 'MSSharePoint',
    configuration: {
      siteUrl: 'https://company.sharepoint.com/sites/docs',
      clientId: 'client-id',
      clientSecret: 'client-secret',
      tenantId: 'tenant-id'
    }
  },
  { 'AI-Resource-Group': 'default' }
).execute();

// Get pipeline status
const status = await PipelinesApi.getPipelineStatus(
  pipeline.id,
  { 'AI-Resource-Group': 'default' }
).execute();

Vector API

import { VectorApi } from '@sap-ai-sdk/document-grounding';

// Create collection
const collection = await VectorApi.createCollection(
  {
    name: 'my-collection',
    embeddingModel: 'text-embedding-3-large'
  },
  { 'AI-Resource-Group': 'default' }
).execute();

// Add documents
await VectorApi.createDocuments(
  collection.id,
  {
    documents: [
      {
        chunks: [
          { content: 'SAP CAP is a framework...', metadata: { topic: 'cap' } },
          { content: 'Cloud Foundry provides...', metadata: { topic: 'cf' } }
        ]
      }
    ]
  },
  { 'AI-Resource-Group': 'default' }
).execute();

// Delete collection
await VectorApi.deleteCollectionById(
  collection.id,
  { 'AI-Resource-Group': 'default' }
).execute();

Retrieval API

import { RetrievalApi } from '@sap-ai-sdk/document-grounding';

// Search documents
const results = await RetrievalApi.search(
  {
    query: 'What is SAP CAP?',
    dataRepositories: [{ type: 'vector', id: collection.id }],
    maxChunks: 5
  },
  { 'AI-Resource-Group': 'default' }
).execute();

for (const chunk of results.chunks) {
  console.log('Content:', chunk.content);
  console.log('Score:', chunk.score);
}

Java Document Grounding

import com.sap.ai.sdk.documentgrounding.*;

// Create client
var pipelineClient = new PipelinesApi();
var vectorClient = new VectorApi();
var retrievalClient = new RetrievalApi();

// List pipelines
var pipelines = pipelineClient.listPipelines()
    .withHeader("AI-Resource-Group", "default")
    .execute();

// Search documents
var results = retrievalClient.search(
    SearchRequest.builder()
        .query("What is SAP CAP?")
        .dataRepositories(List.of(
            VectorRepository.create("collection-id")
        ))
        .maxChunks(5)
        .build()
).execute();

Prompt Registry

JavaScript

import { PromptTemplatesApi } from '@sap-ai-sdk/prompt-registry';

// List templates
const templates = await PromptTemplatesApi.listPromptTemplates(
  { scenarioId: 'customer-support' },
  { 'AI-Resource-Group': 'default' }
).execute();

// Get template by ID
const template = await PromptTemplatesApi.getPromptTemplate(
  'template-id',
  { 'AI-Resource-Group': 'default' }
).execute();

Java Prompt Registry

import com.sap.ai.sdk.promptregistry.PromptClient;
import com.sap.ai.sdk.promptregistry.PromptTemplateSpec;

var promptClient = new PromptClient();

// Create template
var templateSpec = PromptTemplateSpec.builder()
    .name("greeting-template")
    .scenario("customer-support")
    .version("1.0.0")
    .template("Hello {{name}}, welcome to {{company}}!")
    .build();

promptClient.createOrUpdateTemplate(templateSpec);

// Retrieve template
var template = promptClient.getTemplate("template-id");

// Or by name/scenario/version
var template = promptClient.getTemplate("greeting-template", "customer-support", "1.0.0");

// List templates
var templates = promptClient.listTemplates("customer-support");

// Delete template (only imperatively managed)
promptClient.deleteTemplate("template-id", "1.0.0");

// List template edit history
var history = promptClient.listPromptTemplateHistory(
    "customer-support", // scenario
    "1.0.0",            // version
    "greeting-template" // name
);

Import YAML Templates

// Import declarative templates from YAML
promptClient.importTemplates(new File("templates.yaml"));
# templates.yaml
templates:
  - name: support-greeting
    scenario: customer-support
    version: "1.0.0"
    template: |
      You are a helpful support agent for {{company}}.
      Greet the customer: {{customer_name}}

Use with Orchestration

// JavaScript - reference template in orchestration
const client = new OrchestrationClient({
  promptTemplating: {
    model: { name: 'gpt-4o' },
    prompt: {
      ref: {
        name: 'support-greeting',
        scenario: 'customer-support',
        version: '1.0.0'
      }
    }
  }
});

const response = await client.chatCompletion({
  placeholderValues: {
    company: 'SAP',
    customer_name: 'John'
  }
});
// Java - reference template in orchestration
var prompt = new OrchestrationPrompt()
    .withTemplateRef("support-greeting", "customer-support", "1.0.0");

var result = client.chatCompletion(prompt, config);

Spring AI Integration with Prompt Registry

import com.sap.ai.sdk.orchestration.spring.SpringAiConverter;

// Get template and convert to Spring AI messages
var templateResponse = promptClient.parsePromptTemplateByNameVersion(
    "customer-support", "1.0.0", "support-greeting",
    "default",
    false, // includeHistory
    new PromptTemplateSubstitutionRequest()
        .inputParams(Map.of("company", "SAP", "customer_name", "John"))
);

// Convert to Spring AI message list
var messages = SpringAiConverter.promptTemplateToMessages(templateResponse);

// Use with Spring AI ChatClient
var chatClient = ChatClient.builder(chatModel).build();
var response = chatClient.prompt()
    .messages(messages)
    .call()
    .content();

Deployment Management

Java Deployment API

import com.sap.ai.sdk.core.DeploymentApi;
import com.sap.ai.sdk.core.model.*;

var deploymentApi = new DeploymentApi();

// Create deployment
var deploymentRequest = new AiDeploymentCreationRequest()
    .configurationId("config-id");

var deployment = deploymentApi.create(
    "default", // resource group
    deploymentRequest
).execute();

System.out.println("Deployment ID: " + deployment.getId());
System.out.println("Status: " + deployment.getStatus());

// Check deployment status
var status = deploymentApi.get(
    "default",
    deployment.getId()
).execute();

// Stop deployment (only RUNNING deployments)
if (status.getStatus() == AiDeploymentStatus.RUNNING) {
    deploymentApi.modify(
        "default",
        deployment.getId(),
        new AiDeploymentModificationRequest()
            .targetStatus(AiDeploymentTargetStatus.STOPPED)
    ).execute();
}

// Delete deployment (only STOPPED or UNKNOWN)
if (status.getStatus() == AiDeploymentStatus.STOPPED ||
    status.getStatus() == AiDeploymentStatus.UNKNOWN) {
    deploymentApi.delete("default", deployment.getId()).execute();
}

Custom Destinations

JavaScript

// Use custom destination
const artifact = await ArtifactApi.artifactCreate(
  { name: 'my-artifact', kind: 'dataset', url: 's3://bucket/data' },
  { 'AI-Resource-Group': 'default' }
).execute({
  destinationName: 'my-aicore-destination',
  useCache: false // disable destination caching
});

Java

import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor;
import com.sap.ai.sdk.core.AiCoreService;

// Get destination
var destination = DestinationAccessor.getDestination("my-aicore-destination").asHttp();

// Use with AI Core service
var aiCoreService = new AiCoreService().withBaseDestination(destination);

// APIs will now use this destination
var deploymentApi = new DeploymentApi(aiCoreService);

Documentation Links

Source: SKILL.md on GitHub

1 warning16d5 checks · Risk SAFE
  • Gen Agent Trust Hub16d

    The skill is a comprehensive documentation and integration guide for the SAP Cloud SDK for AI. It follows security best practices for credential management, emphasizing environment variables and service bindings over hardcoded secrets. It also provides extensive guidance on implementing security controls like content filtering and data masking to mitigate risks inherent in AI integrations.

  • Socket16d

    No alerts

  • Snyk16d

    Risk: LOW · No issues

  • Runlayer6mo

    8/12 files flagged

  • ZeroLeaks5mo

    Score: 93/100 · 2 sections analyzed

Signed by skilld at 620a19a. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 2 weeks ago.

Activeupdated 2 months ago
Other metadata
metadata
{
  "maintainer": "Eduard Jiglau",
  "maintainer_email": "hello@sap-ai-skills.com",
  "website": "https://sap-ai-skills.com",
  "version": "2.4.1",
  "last_verified": "2026-06-15",
  "package_evidence": "docs/project/package-evidence/2026-06-15.json"
}

README badge

README badge for secondsky/sap-skills/sap-cloud-sdk-ai