SAP Sovereign Regions — what works where
When generating code or recipes for a SAP customer, always check region context first. China and KSA have no Anthropic/OpenAI models in AI Core; NS2 has a gated subset. Hardcoding a wrong model produces a 403 at deploy time — the highest-cost failure mode for sovereign pilots.
Decision rule
- If the user has named a region (
china, ns2, ksa, commercial / EU/US/AP), use it.
- If they haven't but the prompt mentions sovereign keywords ("21Vianet", "FedRAMP", "Saudi", "localization", "ITAR"), infer the region and confirm.
- If still ambiguous, ASK before generating code.
Model availability (June 2026 snapshot — verify against live catalog)
| Family |
commercial |
china |
ns2 |
ksa |
| Anthropic Claude |
✅ Sonnet/Opus 4.x |
❌ |
⚠ subset |
❌ |
| OpenAI GPT |
✅ 4o/5/o-series |
❌ |
⚠ subset |
❌ |
| Mistral |
✅ |
✅ Large 2407 |
⚠ check |
✅ Large 2407 |
| Llama / SAP-hosted OSS |
✅ |
✅ preferred |
✅ |
✅ |
| Qwen / DeepSeek |
rare |
✅ via partner |
❌ |
rare |
| Falcon |
rare |
rare |
rare |
✅ |
| Embeddings (OpenAI) |
✅ |
❌ |
⚠ subset |
❌ |
| Embeddings (multilingual SAP-hosted) |
✅ |
✅ |
✅ |
✅ |
Default picks for new recipes
| Region |
LLM |
Embedding |
| commercial |
anthropic--claude-sonnet-4-5 |
text-embedding-3-large |
| china |
mistralai--mistral-large-2407 |
SAP-hosted multilingual |
| ns2 |
pull live catalog; never default |
pull live catalog |
| ksa |
mistralai--mistral-large-2407 |
SAP-hosted multilingual (verify Arabic quality) |
Other deltas
| Capability |
china |
ns2 |
ksa |
| Cross-region egress |
blocked |
blocked (FedRAMP) |
restricted |
| Public PyPI / Docker Hub |
blocked; use mirrors |
mirror only |
mirror only |
| Joule UI |
gated |
gated |
GA |
| Joule Studio 2.0 / BAIP |
later |
later |
later |
When you must hardcode a region default
Don't. Scaffold with /sap-a2a-agent-toolkit:create-agent from the A2A Agent Toolkit submodule at toolkits/a2a-agent-toolkit/ instead, passing --llm-provider aicore or --llm-provider openai-compatible based on live preflight output and the source-backed regional reference in references/btp-regional-availability.md. The generated project reads the model name from an env var (MODEL_NAME for AI Core, MODEL_GATEWAY_URL + gateway-side deployment name for openai-compatible) — never inline a model name in a template's source code.
Verify
# Confirm a model is available in the customer's region:
curl -s "$AICORE_BASE_URL/v2/lm/scenarios/foundation-models/configurations" \
-H "Authorization: Bearer $TOKEN" -H "AI-Resource-Group: $AICORE_RESOURCE_GROUP" \
| jq -r '.resources[].name' | grep -i "$MODEL_QUERY"
Cross-references