fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652) - #5728

Draft
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652
Draft

fix: [Bug]: PySDK V3: pydantic-core (2.42.0) incompatibility with sagemaker.ai_regist (5652)#5728
aviruthen wants to merge 2 commits into
aws:masterfrom
aviruthen:fix/bug-pysdk-v3-pydantic-core-2-42-0-incompatibility-5652

Conversation

@aviruthen

Copy link
Copy Markdown
Collaborator

Description

The issue is a pydantic/pydantic-core version incompatibility. sagemaker-core declares 'pydantic>=2.0.0,<3.0.0' as a dependency but does NOT declare pydantic-core. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When users run 'pip install --force-reinstall', pip may resolve pydantic-core to a newer version (e.g., 2.42.0) that is incompatible with the installed pydantic version. This causes a SystemError at import time when any module transitively imports pydantic (e.g., DataSet → session_helper → pydantic). The fix is to either: (1) add pydantic-core as a dependency that will be co-resolved with pydantic, or (2) tighten pydantic constraints. The best approach is to let pydantic manage its own pydantic-core dependency but also exclude known-incompatible pydantic-core versions, plus add a runtime compatibility check that provides a helpful error message.

Related Issue

Related issue: 5652

Changes Made

  • sagemaker-core/pyproject.toml
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py
  • sagemaker-core/src/sagemaker/core/__init__.py
  • sagemaker-core/tests/unit/test_pydantic_compat.py

AI-Generated PR

This PR was automatically generated by the PySDK Issue Agent.

  • Confidence score: 85%
  • Classification: bug
  • SDK version target: V3

Merge Checklist

  • Changes are backward compatible
  • Commit message follows prefix: description format
  • Unit tests added/updated
  • Integration tests added (if applicable)
  • Documentation updated (if applicable)

@mohamedzeidan2021

Copy link
Copy Markdown
Collaborator
  1. pydantic-core as a direct dependency is counterproductive. Pydantic already pins its exact required pydantic-core version internally. Adding a separate loose >=2.27.0,<3.0.0 constraint gives pip two conflicting signals and can cause the very mismatch this PR is trying to prevent. This line should be removed.

  2. The init.py error handler silently swallows the main error case. The SystemError path raises
    ImportError("Pydantic version incompatibility detected: ..."), but the catch checks for "incompatible" — which is not a substring of
    "incompatibility". The condition evaluates to False and the error is silently ignored via pass.

  3. The version comparison in _pydantic_compat.py is effectively dead code. pydantic.pydantic_core_version doesn't exist in standard
    pydantic 2.x, and the fallback to pydantic._internal._generate_schema doesn't contain a version string either. It always hits the return early.

The only part that's actually useful is catching SystemError and converting it to a clear ImportError. That's ~10 lines and doesn't need the
dependency change or the version comparison logic.

@aviruthen

Copy link
Copy Markdown
CollaboratorAuthor

🤖 Iteration #1 — Review Comments Addressed

fix: Pydantic/pydantic-core version incompatibility error handling

Problem

When users install sagemaker with pip install --force-reinstall, pip may resolve pydantic-core to a version that is incompatible with the installed pydantic version. Pydantic requires an exact matching pydantic-core version (e.g., pydantic 2.11.5 requires pydantic-core==2.41.5). When the versions are mismatched, import pydantic raises a cryptic SystemError that is confusing to users.

Root Cause

Pydantic internally pins its exact required pydantic-core version. When --force-reinstall or --no-deps is used, pip may install a newer pydantic-core that doesn't match, causing a SystemError at import time.

Solution

This PR adds a minimal compatibility check that:

  1. Catches SystemError from import pydantic and converts it to a clear ImportError with remediation instructions (pip install pydantic pydantic-core --force-reinstall)
  2. Does NOT add pydantic-core as a direct dependency — pydantic already manages its own pydantic-core dependency internally, and adding a separate loose constraint would give pip conflicting signals
  3. Removes dead code — the previous iteration had version comparison logic that relied on non-existent pydantic attributes (__pydantic_core_version__) and was effectively unreachable

Changes

  • sagemaker-core/pyproject.toml: Removed pydantic-core as a direct dependency (pydantic manages it internally)
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplified to only catch SystemErrorImportError conversion (~10 lines of useful code)
  • sagemaker-core/src/sagemaker/core/__init__.py: Fixed error handling that was silently swallowing the ImportError due to substring mismatch ("incompatible" vs "incompatibility")
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Fixed mock import approach and added test for error chaining

Testing

  • Unit tests verify the SystemErrorImportError conversion works correctly
  • Unit tests verify the error message contains remediation instructions
  • Unit tests verify the original SystemError is chained as __cause__
  • Compatible versions pass through without any error

Note: CI integration test failures in the previous iteration were all due to pre-existing resource limit issues (endpoint quotas, hub content limits) unrelated to this change.

Comments reviewed: 20
Files modified:sagemaker-core/pyproject.toml, sagemaker-core/src/sagemaker/core/__init__.py, sagemaker-core/src/sagemaker/core/_pydantic_compat.py, sagemaker-core/tests/unit/test_pydantic_compat.py

  • sagemaker-core/pyproject.toml: Remove pydantic-core as a direct dependency. Pydantic already pins its exact required pydantic-core version internally, so adding a separate loose constraint gives pip conflicting signals and can caus
  • sagemaker-core/src/sagemaker/core/__init__.py: Simplify the pydantic compatibility check in init.py. The previous version had a bug where it checked for 'incompatible' but the raised error said 'incompatibility', causing the condition to be Fa
  • sagemaker-core/src/sagemaker/core/_pydantic_compat.py: Simplify _pydantic_compat.py to only catch SystemError and convert it to a clear ImportError. Remove the dead version comparison code that relied on non-existent pydantic attributes.
  • sagemaker-core/tests/unit/test_pydantic_compat.py: Simplify tests to match the simplified _pydantic_compat module. Fix the mock import approach to be more robust.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@aviruthen@mohamedzeidan2021