-
Notifications
You must be signed in to change notification settings - Fork 1.4k
fix: support us-gov. and other multi-character Bedrock geo prefixes #3645
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
fix: support us-gov. and other multi-character Bedrock geo prefixes #3645
Conversation
|
|
||
|
|
||
| # Known geo prefixes for cross-region inference profile IDs | ||
| _BEDROCK_GEO_PREFIXES: tuple[str, ...] = ('us.', 'eu.', 'apac.', 'jp.', 'au.', 'ca.', 'global.', 'us-gov.') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think at some point it might be worth unifying this and the other private constant in models/bedrock.py
But this just extends it to support govcloud and global. Its been a real issue since Claude 4.5 came out and AWS doing cross-region inferencing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you should definitely not duplicate it, since we're already importing the BedrockModelProfile in models/bedrock.py we should make this public and import it there.
| from pydantic_ai.providers.bedrock import BedrockModelProfile |
@DouweM do you agree?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sounds good!
dsfaccini
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thank you for the PR @Leundai ! I've requested a couple changes, let me know if you have any questions.
|
|
||
|
|
||
| # Known geo prefixes for cross-region inference profile IDs | ||
| _BEDROCK_GEO_PREFIXES: tuple[str, ...] = ('us.', 'eu.', 'apac.', 'jp.', 'au.', 'ca.', 'global.', 'us-gov.') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think you should definitely not duplicate it, since we're already importing the BedrockModelProfile in models/bedrock.py we should make this public and import it there.
| from pydantic_ai.providers.bedrock import BedrockModelProfile |
@DouweM do you agree?
The BedrockProvider.model_profile method previously only handled 2-character regional prefixes (e.g., 'us.', 'eu.'), causing issues with models using longer prefixes like 'us-gov.' (AWS GovCloud) and 'global.'. This caused extended thinking to fail in multi-turn conversations because bedrock_send_back_thinking_parts stayed at its default False value for these models. ThinkingPart blocks from previous turns were converted to text blocks instead of reasoningContent, causing Bedrock to reject requests with: 'Expected thinking or redacted_thinking, but found text' Changes: - Add _strip_geo_prefix() helper function to properly handle all known geo prefixes including us-gov. and global. - Update _AWS_BEDROCK_INFERENCE_GEO_PREFIXES to include us-gov. - Add comprehensive tests for all geo prefixes Fixes cross-region inference for AWS GovCloud environments.
… BEDROCK_GEO_PREFIXES This test ensures we don't add new model names with geo prefixes that aren't handled by the provider's model_profile method. Also exports BEDROCK_GEO_PREFIXES in __all__.
Model names with geo prefixes have 3+ dot-separated parts, so we can detect them without knowing the provider names.
53d0013 to
745e2eb
Compare
Updated the docstring for the test_bedrock_provider_model_profile_all_geo_prefixes function to be more concise. Modified the error message in the test_latest_bedrock_model_names_geo_prefixes_are_supported function to remove the file path reference, enhancing clarity.
|
@dsfaccini Thanks so much for taking a look! I've addressed your comments here. |
Summary
The
BedrockProvider.model_profilemethod previously only handled 2-character regional prefixes (e.g.,us.,eu.), causing issues with models using longer prefixes likeus-gov.(AWS GovCloud) andglobal..Problem
When using extended thinking with
us-gov.anthropic.*models via Bedrock, themodel_profilemethod doesn't recognize theus-gov.prefix because it only strips 2-character prefixes:This causes
bedrock_send_back_thinking_partsto stay at its defaultFalsevalue. As a result,ThinkingPartblocks from previous conversation turns are converted to text blocks with thinking tags instead ofreasoningContent, causing Bedrock to reject the request with:Solution
_strip_geo_prefix()helper function that properly handles all known geo prefixes includingus-gov.andglobal._AWS_BEDROCK_INFERENCE_GEO_PREFIXESconstant to includeus-gov.(the comment in the code already suggested this)Affected Models
us-gov.anthropic.claude-sonnet-4-5-20250929-v1:0us-gov.anthropic.claude-3-7-sonnet-20250219-v1:0global.anthropic.claude-opus-4-5-20251101-v1:0Testing
All existing tests pass, plus new parametrized tests for all geo prefixes