Skip to main content
PraisonAI raises clear errors instead of silently picking a default when configuration is ambiguous.
from praisonaiagents import Agent

# Explicit provider/model — no silent OpenAI fallback
agent = Agent(name="assistant", llm="ollama/llama3")
agent.start("Hello!")
The user passes ambiguous configuration; PraisonAI raises an explicit error with a fix hint instead of silently falling back.

How It Works

Behaviour change (PR #2122): Several subsystems that previously fell back silently now raise explicit errors. Review the table below when upgrading.

What Changed

AreaOld behaviourNew behaviourDeep dive
Database URLUnknown scheme → SQLite fallbackValueErrorCloud Databases
Model stringUnrecognised name → OpenAIValueErrorMulti-Provider Advanced
Daytona sandboxAppeared available with clientNotImplementedErrorSandbox
LazyCacheCached None on ImportErrorRe-raises ImportErrorOptional deps docs
Approvalenabled: false by defaultenabled: true by defaultApproval
Claude CLI backendbypassPermissions defaultdefault mode; bypass requires opt-inCLI Backend Protocol
SandlockSandbox (PR #1367)Landlock ABI too low → silent SubprocessSandbox fallbackRuntimeError at init timeSandbox

Quick Start

1

Grep your logs for new errors

grep -r "Unable to infer DB backend\|Cannot infer provider\|Daytona backend not yet implemented" logs/
2

Fix database URLs explicitly

# Was silently SQLite — now raises ValueError
db_url = "sqlite:///mydata.db"  # explicit scheme required
3

Use provider/model form

from praisonaiagents import Agent

# Was OpenAI fallback — now raises ValueError
agent = Agent(name="assistant", llm="ollama/llama3")

Migrating

Exception textFix
Unable to infer DB backend from URL '...'; supported schemes: postgres://, mysql://, sqlite://, redis://, libsql://, http(s)://Prefix URL with a supported scheme, e.g. sqlite:///path.db
Cannot infer provider from model '...'. Use the 'provider/model' form, e.g. 'ollama/llama3', 'bedrock/anthropic.claude-3-sonnet'.Use provider/model or a recognised prefix (gpt-, claude-, gemini-)
Daytona backend not yet implemented. Use 'subprocess', 'docker', or 'e2b' sandbox instead.Switch sandbox_type to a supported backend
Approval prompts where none expectedSet approval=False or approval: {enabled: false} in YAML

Best Practices

When in doubt, spell out schemes, provider prefixes, and backend names — silent fallbacks are gone.
Approval is on by default (PR #2122). Use approval=False for fully autonomous runs.
Claude Code bypass requires unsafe=True and PRAISONAI_CLAUDE_BYPASS_PERMISSIONS=1.
Do not rely on implicit fallbacks — set sandbox_type to a supported backend (subprocess, docker, or e2b).

Approval

Safe-by-default approval gates

Cloud Databases

Supported DB URL schemes