Skip to main content
Agno supports 45+ model providers. Switching models within the same provider is safe, but switching providers in the same session can break because stored message history formats differ.
SwitchRisk
Same provider (OpenAI → OpenAI, Google → Google)Safe
Cross-provider (OpenAI ↔ Google ↔ Anthropic)Risky. Message history is often not interchangeable

Safe Model Switching

The safest way to switch models is to change the model ID while keeping the same provider:
from uuid import uuid4
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai.chat import OpenAIChat

db = SqliteDb(db_file="tmp/agent_sessions.db")

session_id = str(uuid4())
user_id = "user@example.com"

# Create initial agent with expensive model
expensive_agent = Agent(
    model=OpenAIChat(id="gpt-5.4"),
    instructions="You are a helpful assistant for technical discussions.",
    db=db,
    add_history_to_context=True,
)

# Have a conversation
expensive_agent.print_response(
    "Explain quantum computing basics", session_id=session_id, user_id=user_id
)
expensive_agent.print_response(
    "What are the main applications?", session_id=session_id, user_id=user_id
)

# Switch to budget model within same provider (safe)
budget_agent = Agent(
    model=OpenAIChat(id="gpt-5.4-mini"),
    instructions="You are a helpful assistant for technical discussions.",
    db=db,
    add_history_to_context=True,
)

# Continue conversation - history shared via session_id
budget_agent.print_response(
    "Can you summarize our discussion so far?", session_id=session_id, user_id=user_id
)

Cross-Provider Switching

Switching providers mid-session can produce unpredictable results. Test thoroughly before doing this in production:
from uuid import uuid4
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openai.chat import OpenAIChat
from agno.models.google import Gemini

db = SqliteDb(db_file="tmp/cross_provider_demo.db")

session_id = str(uuid4())
user_id = "user@example.com"

# Create OpenAI agent
openai_agent = Agent(
    model=OpenAIChat(id="gpt-5.4-mini"),
    instructions="You are a helpful assistant.",
    db=db,
    add_history_to_context=True,
)

# Have a conversation with OpenAI
openai_agent.print_response(
    "Explain machine learning basics", session_id=session_id, user_id=user_id
)
openai_agent.print_response(
    "What about deep learning?", session_id=session_id, user_id=user_id
)

# Now switch to Google Gemini using same session
gemini_agent = Agent(
    model=Gemini(id="gemini-3.5-flash"),
    instructions="You are a helpful assistant.",
    db=db,
    add_history_to_context=True,
)

# This may work but with unpredictable results due to message format differences
gemini_agent.print_response(
    "Continue our discussion about machine learning", session_id=session_id, user_id=user_id
)
# Note: Gemini may not properly interpret OpenAI's message history format

Learn More