René's URL Explorer Experiment


Title: feat(aicore/fallback): add opt-in model fallback for Orchestration v2 by lenin-ribeiro · Pull Request #185 · SAP/cloud-sdk-python · GitHub

Open Graph Title: feat(aicore/fallback): add opt-in model fallback for Orchestration v2 by lenin-ribeiro · Pull Request #185 · SAP/cloud-sdk-python

X Title: feat(aicore/fallback): add opt-in model fallback for Orchestration v2 by lenin-ribeiro · Pull Request #185 · SAP/cloud-sdk-python

Description: Disclaimer: Do not include SAP-internal or customer-specific information in this PR (e.g. internal system URLs, customer names, tenant IDs, or confidential configurations). This is a public repository. Description Adds opt-in model fallback for SAP AI Core Orchestration v2 to the sap_cloud_sdk.aicore module. Orchestration v2 supports preference-ordered fallback module configurations: when the primary call fails (model unsupported in region, 429, 408, or any 5xx — and unsupported-model only for streaming), the server transparently retries with the next preference. The underlying litellm SAP provider already builds body["config"]["modules"] as a list when fallback_sap_modules is present in optional_params; what was missing was the SDK-side ergonomic surface and the response-side visibility into which preferences were skipped. This PR introduces: FallbackModel, FallbackConfig — typed dataclasses for declaring per-preference model + params + version. set_fallbacks(config) — single entry point mirroring set_filtering(). Fallback is opt-in: set_aicore_config() does NOT activate it. Developers either call set_fallbacks(...) programmatically or set AICORE_FALLBACK_ENABLED=true (with AICORE_FALLBACK_MODELS or AICORE_FALLBACK_CONFIG) and call set_fallbacks() with no args. response.intermediate_failures — when the fallback path fires, the per-preference failure list from the orchestration response is surfaced as an attribute on the returned ModelResponse. None when the primary succeeded, useful as a quick check. OrchestrationPatchConfig — a subclass of FilteringOrchestrationConfig that adds the fallback-side transform_request / transform_response hooks. Filtering stays entirely in the filtering/ package; the fallback subclass reuses filtering behaviour through inheritance. Filtering broadcast across fallbacks — when both filtering and fallback are active, the filtering config is applied to every module entry on the wire (previously modules[0] only). Consistent SDK-side default; if a fallback should run unfiltered, the developer can call disable_filtering() before the call. Related Issue N/A — additive feature, no issue tracked Type of Change Bug fix (non-breaking change that fixes an issue) New feature (non-breaking change that adds functionality) Breaking change (fix or feature that would cause existing functionality to change) Documentation update How to Test Unit tests (no live credentials required) uv run python -m pytest tests/aicore -v Expect 153 passed, 8 skipped (the 8 skips are integration scenarios waiting for live env vars). Integration tests (requires AI Core access) Copy .env_integration_tests.example to .env_integration_tests and fill in the AI Core creds. Set the new fallback secrets: AICORE_FALLBACK_TEST_PRIMARY_MODEL=sap/this-model-does-not-exist AICORE_FALLBACK_TEST_FALLBACK_MODEL=sap/mistralai--mistral-small-instruct The primary should be a model name the orchestration server reports as unsupported in your region — a genuinely nonexistent name works and avoids depending on transient 5xx errors. Run: uv run python -m pytest tests/aicore/integration/test_fallback_bdd.py -v Expected: 4 scenarios pass (primary succeeds, primary unsupported → fallback used, filtering + fallback composition, streaming + fallback). Manual smoke from sap_cloud_sdk.aicore import ( FallbackConfig, FallbackModel, completion, set_aicore_config, set_fallbacks, ) set_aicore_config() set_fallbacks(FallbackConfig([ FallbackModel(model="sap/mistralai--mistral-small-instruct"), ])) response = completion( model="sap/gpt-4o", # or any potentially-unsupported model messages=[{"role": "user", "content": "Translate 'hello' to German."}], ) print(response.choices[0].message.content) print(getattr(response, "intermediate_failures", None)) # None if primary worked; list of failure dicts if fallback fired. Checklist I have read the Contributing Guidelines I have verified that my changes solve the issue I have added/updated automated tests to cover my changes All tests pass locally (pytest tests/aicore, ruff check, ruff format --check, ty check) I have verified that my code follows the Code Guidelines I have updated documentation (if applicable) — aicore/user-guide.md gains a "Model Fallback (opt-in)" section I have added type hints for all public APIs My code does not contain sensitive information (credentials, tokens, etc.) I have followed Conventional Commits for commit messages Breaking Changes None for users of sap_cloud_sdk.aicore public APIs. There is one user-visible behavioural change that only affects users who use filtering AND fallback together (an impossible combination on main today since fallback didn't exist): when both are active, the filtering configuration now applies to every module entry (primary + every fallback), not just modules[0]. This is the safe-by-default semantic — to run a fallback unfiltered, explicitly disable_filtering() before that call. Documented in the user guide. Additional Notes Design choices Fallback lives in its own package (src/sap_cloud_sdk/aicore/fallback/), mirroring how filtering lives in filtering/. The public API — FallbackModel, FallbackConfig, set_fallbacks — is flat-re-exported from sap_cloud_sdk.aicore so callers don't touch the subpackage directly. OrchestrationPatchConfig inherits from FilteringOrchestrationConfig. One class handles both concerns at request time; filtering behaviour is reused, not reimplemented. When only filtering is active, FilteringOrchestrationConfig is the installed class exactly as on main; when fallback is installed, our subclass takes the slot. Filtering stays as it merged in #174. The only cross-module coupling is a small hook inside filtering._patch._install that defers to fallback when its config is active — so set_filtering / disable_filtering toggles while fallback is on update the filtering state without clobbering OrchestrationPatchConfig. Lazy import avoids a circular dependency. Env vars opt-in. AICORE_FALLBACK_ENABLED defaults to false (unlike filtering, which is on by default after set_aicore_config()). Two-tier schema: AICORE_FALLBACK_MODELS (comma list, simple case) + AICORE_FALLBACK_CONFIG (JSON, full per-model config; takes precedence). intermediate_failures on the response object. Pydantic ModelResponse uses extra="allow", so we can attach the field directly. Accessed via getattr(response, "intermediate_failures", None). v1 limitations (documented) intermediate_failures is surfaced for non-streaming responses only. Capturing the field from SAPStreamIterator chunks requires deeper changes to litellm internals and is deferred to a future iteration. The streaming integration test asserts that fallback still fires correctly server-side; it doesn't assert intermediate_failures. Telemetry Added Operation.AICORE_SET_FALLBACKS = "set_fallbacks". The set_fallbacks entry point is decorated with @record_metrics(Module.AICORE, Operation.AICORE_SET_FALLBACKS) per docs/GUIDELINES.md. Files added / changed NEW: src/sap_cloud_sdk/aicore/fallback/__init__.py src/sap_cloud_sdk/aicore/fallback/_patch.py src/sap_cloud_sdk/aicore/fallback/fallback.py src/sap_cloud_sdk/aicore/fallback/py.typed tests/aicore/fallback/__init__.py tests/aicore/fallback/unit/__init__.py tests/aicore/fallback/unit/test_fallback_config.py tests/aicore/fallback/unit/test_patch.py tests/aicore/fallback/unit/test_set_fallbacks.py tests/aicore/integration/fallback.feature tests/aicore/integration/test_fallback_bdd.py MODIFIED: src/sap_cloud_sdk/aicore/__init__.py # export FallbackModel / FallbackConfig / set_fallbacks src/sap_cloud_sdk/aicore/filtering/_patch.py # small hook: defer to fallback in _install when fallback is active src/sap_cloud_sdk/aicore/user-guide.md # new "Model Fallback (opt-in)" section src/sap_cloud_sdk/core/telemetry/operation.py # AICORE_SET_FALLBACKS tests/aicore/integration/conftest.py # fallback fixtures + clean-skip behaviour tests/core/unit/telemetry/test_operation.py # expected enum count 151 → 152 .env_integration_tests.example # AICORE_FALLBACK_TEST_PRIMARY_MODEL / _FALLBACK_MODEL

Open Graph Description: Disclaimer: Do not include SAP-internal or customer-specific information in this PR (e.g. internal system URLs, customer names, tenant IDs, or confidential configurations). This is a public reposit...

X Description: Disclaimer: Do not include SAP-internal or customer-specific information in this PR (e.g. internal system URLs, customer names, tenant IDs, or confidential configurations). This is a public reposit...

Opengraph URL: https://github.com/SAP/cloud-sdk-python/pull/185

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/commits/:range(.:format)
route-controllerpull_requests
route-actioncommits
fetch-noncev2:4b770b96-d4eb-eb57-ccad-9e7c370ec0ab
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idD07E:3C53BD:4BF0200:6533425:6A655255
html-safe-nonceb21df0e320524560ead1882b4ed57fb7582beb690c650e2aefd5bae1a8d950f5
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMDdFOjNDNTNCRDo0QkYwMjAwOjY1MzM0MjU6NkE2NTUyNTUiLCJ2aXNpdG9yX2lkIjoiOTAwMDk4OTA4MTcwODM1MjA4NSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac29f63afcba9237bcc60135245a50c5a32b15b7e94ea1ae0855b17e43bfc98fe5
hovercard-subject-tagpull_request:3926188882
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/commits
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
twitter:imagehttps://avatars.githubusercontent.com/u/153829503?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/153829503?s=400&v=4
og:image:altDisclaimer: Do not include SAP-internal or customer-specific information in this PR (e.g. internal system URLs, customer names, tenant IDs, or confidential configurations). This is a public reposit...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None52c76df668885aaff23b50bdca1fa1ea44ac9c1553e888ebc70ff1e4daa4625b
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/SAP/cloud-sdk-python git https://github.com/SAP/cloud-sdk-python.git
octolytics-dimension-user_id2531208
octolytics-dimension-user_loginSAP
octolytics-dimension-repository_id1187276298
octolytics-dimension-repository_nwoSAP/cloud-sdk-python
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1187276298
octolytics-dimension-repository_network_root_nwoSAP/cloud-sdk-python
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release309153364422b3c499922d1a2a6404910a58ed8e
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FSAP%2Fcloud-sdk-python%2Fpull%2F185%2Fcommits%2F2502c5809bbef625425ec07ff2525fde99bcc022
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
Code QualityEnforce quality at mergehttps://github.com/features/code-quality
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2FSAP%2Fcloud-sdk-python%2Fpull%2F185%2Fcommits%2F2502c5809bbef625425ec07ff2525fde99bcc022
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Fcommits&source=header-repo&source_repo=SAP%2Fcloud-sdk-python
Reloadhttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
Reloadhttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
Reloadhttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
Please reload this pagehttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
SAP https://github.com/SAP
cloud-sdk-pythonhttps://github.com/SAP/cloud-sdk-python
Notifications https://github.com/login?return_to=%2FSAP%2Fcloud-sdk-python
Fork 34 https://github.com/login?return_to=%2FSAP%2Fcloud-sdk-python
Star 18 https://github.com/login?return_to=%2FSAP%2Fcloud-sdk-python
Code https://github.com/SAP/cloud-sdk-python
Issues 8 https://github.com/SAP/cloud-sdk-python/issues
Pull requests 22 https://github.com/SAP/cloud-sdk-python/pulls
Actions https://github.com/SAP/cloud-sdk-python/actions
Projects https://github.com/SAP/cloud-sdk-python/projects
Security and quality 0 https://github.com/SAP/cloud-sdk-python/security
Insights https://github.com/SAP/cloud-sdk-python/pulse
Code https://github.com/SAP/cloud-sdk-python
Issues https://github.com/SAP/cloud-sdk-python/issues
Pull requests https://github.com/SAP/cloud-sdk-python/pulls
Actions https://github.com/SAP/cloud-sdk-python/actions
Projects https://github.com/SAP/cloud-sdk-python/projects
Security and quality https://github.com/SAP/cloud-sdk-python/security
Insights https://github.com/SAP/cloud-sdk-python/pulse
Sign up for GitHub https://github.com/signup?return_to=%2FSAP%2Fcloud-sdk-python%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2FSAP%2Fcloud-sdk-python%2Fissues%2Fnew%2Fchoose
lenin-ribeirohttps://github.com/lenin-ribeiro
mainhttps://github.com/SAP/cloud-sdk-python/tree/main
feat/aicore-model-fallbackhttps://github.com/SAP/cloud-sdk-python/tree/feat/aicore-model-fallback
Conversation 4 https://github.com/SAP/cloud-sdk-python/pull/185
Commits 41 https://github.com/SAP/cloud-sdk-python/pull/185/commits
Checks 10 https://github.com/SAP/cloud-sdk-python/pull/185/checks
Files changed https://github.com/SAP/cloud-sdk-python/pull/185/files
Please reload this pagehttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
feat(aicore/fallback): add opt-in model fallback for Orchestration v2 https://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022#top
Show all changes 41 commits https://github.com/SAP/cloud-sdk-python/pull/185/files
ba5ed26 feat(orchestration): add content filtering and prompt shield module lenin-ribeiro Jun 19, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/ba5ed26ff7067eca1c8104c9f16220f4656ee7a9
7fa25a6 fix(orchestration): ruff formatting and ty type annotations lenin-ribeiro Jun 19, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/7fa25a6fa1f4d6c998eb96fb45a3c0ff3d8ad9d1
307a36f fix(orchestration): use cast() to satisfy ty Literal return type lenin-ribeiro Jun 19, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/307a36f8a34bf924707e5eee7cf998e66cb7ed47
90410e5 test(telemetry): update module and operation count assertions for orc… lenin-ribeiro Jun 19, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/90410e5f4cc467242dbb660340e224ba478b96dc
2502c58 feat(core): add typed env-var readers in core.env lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
3086021 refactor: move orchestration package to aicore/filtering lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/308602139d0d6228f37722eac86fe0152ae03866
efab15d refactor(aicore/filtering): introduce Severity enum, AICORE_FILTER_* … lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/efab15dadd485bbe40c9687e38d39e1c62d8dd9f
91c4ecb refactor(aicore/filtering): update _litellm_patch test imports lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/91c4ecb8e914456b4cc223a598df7f0d2f68bb52
7440272 refactor(telemetry): fold orchestration module into aicore lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/7440272204a55b1f376ffe9e174806ee839c8880
6c4c253 feat(aicore/filtering): add disable_filtering, retarget telemetry lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/6c4c253aa8e86efc7931150a3f43d9dd905c3084
a90bf07 feat(aicore): flat re-export of filtering public API lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/a90bf07e23d34e0dc197d8ea19af98ebb0f07868
c61c719 docs(readme): update orchestration references to aicore filtering lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/c61c719ebbcc64430f96e9657cf6f242b18ad746
fcd5476 docs(aicore): merge orchestration user guide into aicore guide lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/fcd54765ec59df9b61fc0ceb56803ea51763aeb2
b4152c0 refactor(aicore/filtering): drop stale 'orchestration' wording lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/b4152c0ad42a1db0bd5841cb1cf64239ac0bd434
8a9babc test(aicore/filtering): add integration tests for filtering and promp… lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/8a9babc82c3d5382b48e6a4bc499f808819ba3d8
8b548dd fix: satisfy CI ruff format + ty check; route self-harm prompt via env lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/8b548dd1dc9443e80677d679ee7e4c5b4608b29d
d0a3c8d fix(aicore): satisfy CI ty check and match Azure's Prompt Shield wire… lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/d0a3c8d40559f1b19e9621b8135888108698ec57
38fac0b feat(aicore/filtering): add ContentFilter, AzureContentFilter, LlamaG… lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/38fac0b2423a70aca22d25a8284eafd21d1f440a
cec3879 feat(aicore/filtering): add InputFiltering, OutputFiltering, ContentF… lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/cec3879e3d35951fed84dc6d70e7e6449a6ad760
cc260b3 feat(aicore/filtering): replace kwarg set_filtering with class-based API lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/cc260b33c5ad91b45458f502096f5c985c9bef4c
a1780a9 test(aicore/filtering): update integration step defs for class API lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/a1780a90cced78336fae0aa6e1b680d94a5459a8
2c0696f docs(aicore): rewrite Content Filtering guide for class API lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/2c0696f7d44325190531754c47cf4f904ca084e8
cf4a364 fix(test): explicit None-narrowing for ty in from_env() tests lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/cf4a364f325d78126c88ea60a5880c230ed44fa6
748e298 fix(aicore): address review comments + satisfy stricter CI ty lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/748e298ba55c8b723ea4e076a67cca9e5a60747d
8bcd53b refactor(aicore/filtering): address review comments #11-13 lenin-ribeiro Jun 22, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/8bcd53bed493b3b0012f919d7d0a0ef7a56594a6
b594bd6 refactor(aicore/filtering): collapse public API into filters.py lenin-ribeiro Jun 23, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/b594bd6a8aebae9130f06f18aa6516c37fbbe5ff
3e3edb7 fix(tests): remove stale ty: ignore directives that fail CI lenin-ribeiro Jun 23, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/3e3edb7e904faf6f852592e135be048a63db362e
5744e6d fix(tests): remove stale ty: ignore directives that fail CI's uvx ty lenin-ribeiro Jun 23, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/5744e6d1b02d465a0dce1702c9906cce4626c2c5
286afb4 refactor(aicore/filtering): merge _litellm_patch + core/env into filt… lenin-ribeiro Jun 23, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/286afb48684f2ac7b9b4f0646ed30f4eb37dc00f
ae34803 fix(aicore/filtering): address PR review fixes 21-23 lenin-ribeiro Jun 23, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/ae3480307cc9e03d2d5e53cb5724edd5e1084a8d
4990896 feat(aicore/fallback): add opt-in model fallback for Orchestration v2 lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/4990896461bd9b9fec9e926fa76a0a8a087c6bd5
7e10fff fix(aicore/fallback): broadcast primary prompt template to fallback m… lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/7e10fff75ee776275fd31d326ef2f78ac1def470
932957c chore(aicore/fallback): add py.typed marker for PEP 561 parity lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/932957c8ee399910712318af8f893c9605339fb7
c2b73a5 Merge branch 'main' into feat/orchestration-filtering lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/c2b73a5efadc8b2d9390b82fdc61ebc731a88814
865c0aa chore: bump version to 0.30.0 lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/865c0aa942f320d24ea62c40fbe5d5c8a214f33f
6010e6e Merge branch 'main' into feat/orchestration-filtering lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/6010e6eb2695c7dc0e70b3eb154e8960ab2e628a
e24fef8 refactor(aicore/filtering): split filters.py by concern lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/e24fef80484c55c9b67615ca3101f3fc1fdc846c
1302f54 style(aicore/filtering): ruff format config.py lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/1302f540a88527dfe52c4d97c887f2c7d738d28e
81f9bdd Merge feat/orchestration-filtering — port fallback hooks to refactore… lenin-ribeiro Jun 24, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/81f9bdd7fcace9447756c9a998f535f6aaac2a40
215f3bd refactor(aicore): align fallback branch with merged filtering package… Jul 1, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/215f3bdb5a110f4998f7a933d3995827453d53c3
2b74ed3 Merge remote-tracking branch 'origin/main' into feat/aicore-model-fal… Jul 1, 2026 https://github.com/SAP/cloud-sdk-python/pull/185/commits/2b74ed39e602e254fac1a022e31b271cb020e603
Clear filters https://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
Please reload this pagehttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
Please reload this pagehttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
env.py https://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022#diff-aa95ef171a20cf80925e66f5976bc9640dbc70902064fe5f5882d6d8ec848734
test_env.py https://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022#diff-f3f1eeb3df36de2a84b68167f252241f8c15e236420bee4d17e0fa7658535d43
Prev https://github.com/SAP/cloud-sdk-python/pull/185/commits/90410e5f4cc467242dbb660340e224ba478b96dc
Next https://github.com/SAP/cloud-sdk-python/pull/185/commits/308602139d0d6228f37722eac86fe0152ae03866
Please reload this pagehttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022
https://github.com/lenin-ribeiro
lenin-ribeirohttps://github.com/SAP/cloud-sdk-python/commits?author=lenin-ribeiro
src/sap_cloud_sdk/core/env.pyhttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022#diff-aa95ef171a20cf80925e66f5976bc9640dbc70902064fe5f5882d6d8ec848734
View file https://github.com/SAP/cloud-sdk-python/blob/2502c5809bbef625425ec07ff2525fde99bcc022/src/sap_cloud_sdk/core/env.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SAP/cloud-sdk-python/pull/185/commits/{{ revealButtonHref }}
tests/core/unit/test_env.pyhttps://github.com/SAP/cloud-sdk-python/pull/185/commits/2502c5809bbef625425ec07ff2525fde99bcc022#diff-f3f1eeb3df36de2a84b68167f252241f8c15e236420bee4d17e0fa7658535d43
View file https://github.com/SAP/cloud-sdk-python/blob/2502c5809bbef625425ec07ff2525fde99bcc022/tests/core/unit/test_env.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/SAP/cloud-sdk-python/pull/185/commits/{{ revealButtonHref }}
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.