Model Providers

The model drives a Strands agent, so which model you use is the single biggest determinant of how well it works — and Strands keeps that a swappable choice across providers rather than locking you to one. Model-agnosticism isn't a convenience here; in a model-driven framework it's foundational.

Strands is model-driven, so the model is the most important component — and this post covers model providers: how Strands stays model-agnostic across providers (Bedrock, Anthropic, and others), why that matters more in a model-driven framework than elsewhere, and how model choice interacts with the model-driven approach. If the model drives, the model is the agent, and keeping it swappable is essential.

Model-agnostic by design

Although Strands comes from AWS, it is model-agnostic — it supports multiple model providers (including Amazon Bedrock, Anthropic, and others), not just AWS’s own. You choose the model provider when defining the agent, and swapping it is a configuration change, not a rewrite:

# Illustrative shape — see the Strands docs for exact API.
agent = Agent(model=bedrock_model, system_prompt=..., tools=[...])
# swap the provider without changing the agent's logic:
agent = Agent(model=anthropic_model, system_prompt=..., tools=[...])

This reflects the keep-the-model-swappable principle from the AI Architecture Decisions series, and it’s notable that an AWS framework is deliberately provider-agnostic rather than Bedrock-only — it works well in AWS environments (natural Bedrock integration) but doesn’t lock you there. The agent’s definition (prompt, tools, loop) is independent of the provider, so the model is a pluggable choice.

Why model choice matters more here

Model-agnosticism is valuable in any framework, but in a model-driven framework it’s foundational, for a specific reason: the model drives the agent, so the model’s capability directly determines the agent’s capability. In a heavily workflow-first framework, a weaker model can still perform because the developer’s orchestration carries much of the intelligence; in Strands, there’s no orchestration to compensate — the model does the planning, deciding, and adapting. So:

So in Strands, “which model” is among the most consequential decisions you make — more so than in frameworks where orchestration carries the load. Model-agnosticism gives you the freedom to make that choice well and revisit it, which matters precisely because the choice matters so much.

Model choice as a cost and reliability lever

Because the model is swappable and central, it becomes a lever for cost, reliability, and capability — the same production levers as the Pydantic AI and cost series, sharpened by the model-driven design:

That last point is worth emphasizing: the model-driven approach bets on models getting better (the philosophy post), and model-agnosticism is what lets a Strands agent capture that improvement — swap in the better model and the agent gets better, no code change. The two design choices (model-driven + model-agnostic) reinforce each other: the model drives, so improvements in the model directly improve the agent, and agnosticism lets you adopt those improvements freely.

Choosing and using models in Strands

Practical guidance, tying it together:

The model is the beating heart of a Strands agent — it drives everything — and Strands keeping it a swappable, provider-agnostic choice is what lets you put the right heart in and upgrade it over time. The next post covers building systems of multiple agents when one isn’t enough.

Key takeaways

Further reading

Sources & References