litellm/tests
Cursor Agent ebf4346e0c
Big-bang: replace Prisma with SQLAlchemy + Prisma-compat shim
This is the rip-and-replace counterpart to the phased migration in
PR #28366. The proxy database layer is moved to SQLAlchemy + asyncpg in
a single PR. Existing prisma_client.db.<table>.<method>(...) call sites
keep working unchanged via a compatibility shim; the prisma PyPI package
is dropped from runtime dependencies.

The PR description carries the full breakage inventory.

Test pass rates after rip-and-replace:
* tests/test_litellm/proxy/db/                 247 / 263 = 93.9%
* tests/test_litellm/proxy/management_endpoints/ 1288 / 1289 = 99.9%
* tests/test_litellm/proxy/db/sqlmodel_orm/      38 / 38   = 100%
* combined                                     1573 / 1590 = 98.9%

The 17 failures are all in tests of Prisma-internal subprocess /
watchdog / RoutingPrismaWrapper mechanics that no longer apply to a
SQLAlchemy backend.

Architecture:

* litellm/proxy/db/sqlmodel/schema_parser.py
  Pure-Python parser for the subset of Prisma DSL used by schema.prisma.
  (carried forward from the Phase 1 PR.)

* litellm/proxy/db/sqlmodel/_generate.py
  Code generator that emits Black-formatted SQLModel classes from a
  parsed schema. Output uses JSONB().with_variant(JSON(), 'sqlite')
  so the model definitions are portable to SQLite test environments.

* litellm/proxy/db/sqlmodel/models.py
  SQLModel classes for all 64 Prisma models, generator-seeded.

* litellm/proxy/db/sqlmodel/engine.py
  LiteLLMDB wrapping the async SQLAlchemy engine + sessionmaker, with
  pluggable RDS IAM token rotation (engine recreate on each tick) and
  optional read-replica routing.

* litellm/proxy/db/sqlmodel/compat.py
  PrismaCompatClient exposes the historical Prisma surface --
  per-table accessors, find_unique/first/many, create/update/upsert/
  delete/update_many/delete_many/create_many/count, query_raw/
  execute_raw, batch_(), tx() -- backed by SQLAlchemy. Filter
  translation covers in/contains/startswith/endswith/lt/lte/gt/gte/has
  /AND/OR/NOT/equals plus mode:insensitive and data={...:{increment:N}}.

* litellm/proxy/db/sqlmodel/errors.py
  Native error classes (PrismaError, UniqueViolationError, ...) raised
  by the shim. SQLAlchemy IntegrityError / NoResultFound / ProgrammingError
  are translated to the corresponding LiteLLM-native types.

* tests/_prisma_compat.py + conftest.py
  Test-only stand-in for the prisma namespace so legacy
  from prisma.errors import X imports in test fixtures still resolve
  to the LiteLLM-native errors. Production code has been ported off
  from prisma imports entirely.

Wiring:

* litellm/proxy/utils.py PrismaClient.__init__ now constructs
  LiteLLMDB + PrismaCompatClient instead of Prisma + PrismaWrapper +
  RoutingPrismaWrapper. _get_engine_pid returns 0 (no subprocess).

* The 9 production files that used from prisma.errors import ... /
  import prisma are redirected to the native errors module:
  exception_handler, log_db_metrics, toolset_db, budget/config_override
  /mcp/workflow management endpoints, key_management_endpoints. The
  prisma.Json(...) marker in key_management is replaced by an
  identity shim (SQLAlchemy JSONB accepts dicts directly).

* prisma==0.11.0 dropped from extra_proxy and proxy-dev in pyproject.toml.

Known gaps (called out explicitly in the PR body):

* include= for relation eager-loading is logged-and-ignored. SQLModel
  classes don't carry SQLAlchemy relationship() defs yet; ~55
  production sites pass include={} and would see None for the
  relation attribute. Hand-written relationships per table is the next
  step.
* select=, group_by, and some/every relation filters
  raise NotImplementedError -- 3, 4, and 2 production sites respectively.
* litellm-proxy-extras Prisma migration bundle is unchanged. Alembic
  baseline + recovery path is the next mechanical step.
* schema.prisma copies, the sync workflows, helm migration jobs, and
  Dockerfile prisma-generate steps are unchanged. All rote follow-ups.

Co-authored-by: Mateo Wang <mateo-berri@users.noreply.github.com>
2026-05-20 21:54:58 +00:00
..
agent_tests style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
audio_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
basic_proxy_startup_tests build: migrate packaging, CI, and Docker from Poetry to uv (#25007) 2026-04-09 11:46:23 -07:00
batches_tests chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
benchmarks
code_coverage_tests feat: add componentized proxy deployment with gateway, backend, ui, and migrations (#27557) 2026-05-16 09:25:17 -07:00
documentation_tests style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
enterprise chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
guardrails_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
image_gen_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
litellm Add new chat model metadata (#27313) 2026-05-06 15:15:21 -07:00
litellm-proxy-extras style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
litellm_core_utils Merge branch 'litellm_internal_staging' into litellm_staging_03_22_2026 2026-04-20 19:56:00 +05:30
litellm_utils_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
llm_responses_api_testing fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
llm_translation fix(tests): replace shut-down gpt-4o-audio-preview with gpt-audio-1.5 (#28281) 2026-05-19 14:48:30 -07:00
load_tests style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
local_testing fix(tests): replace shut-down gpt-4o-audio-preview with gpt-audio-1.5 (#28281) 2026-05-19 14:48:30 -07:00
logging_callback_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
mcp_tests feat: litellm shin agent oss staging 05 10 2026 (#27631) 2026-05-11 20:31:43 -07:00
multi_instance_e2e_tests
ocr_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
old_proxy_tests/tests fix: cleanup tests 2026-03-30 16:24:35 -07:00
openai_endpoints_tests chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
otel_tests feat(prometheus): add user_email and user_alias to user budget metrics (#28155) 2026-05-18 16:28:14 -07:00
pass_through_tests chore(deps): refresh dependency locks 2026-05-04 11:36:18 -07:00
pass_through_unit_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
proxy_admin_ui_tests chore(deps): refresh dependency locks 2026-05-04 11:36:18 -07:00
proxy_e2e_anthropic_messages_tests chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
proxy_security_tests style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
proxy_unit_tests Gemini managed agents support (#28270) 2026-05-19 16:02:03 -07:00
router_unit_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
scim_tests
search_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
spend_tracking_tests chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
store_model_in_db_tests style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_litellm Big-bang: replace Prisma with SQLAlchemy + Prisma-compat shim 2026-05-20 21:54:58 +00:00
unified_google_tests fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
vector_store_tests fix: drop milvus dbName and partitionNames from MILVUS_OPTIONAL_PARAMS 2026-04-30 11:51:32 -07:00
windows_tests style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
__init__.py
_flush_vcr_cache.py tests(vcr): isolate cassette redis to CASSETTE_REDIS_URL 2026-05-01 12:32:59 -07:00
_prisma_compat.py Big-bang: replace Prisma with SQLAlchemy + Prisma-compat shim 2026-05-20 21:54:58 +00:00
_vcr_conftest_common.py fix(tests): stabilize image-edit VCR cassettes to stop live gpt-image-1 spend (#28110) 2026-05-18 09:15:39 -07:00
_vcr_redis_persister.py fix(caching): replay openai/responses bridge cache hits as chat streams (#28158) 2026-05-18 16:27:06 -07:00
eval_swe_bench.py Prompt Compression - add it to the proxy (#25729) 2026-04-20 15:08:00 -07:00
gettysburg.wav
large_text.py
openai_batch_completions.jsonl
README.MD
test_budget_management.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_callbacks_on_proxy.py test(callbacks): harden flaky proxy callback-leak detector (#28195) 2026-05-18 16:39:02 -07:00
test_config.py
test_debug_warning.py
test_default_encoding_non_root.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_end_users.py chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
test_entrypoint.py
test_fallbacks.py
test_gpt5_azure_temperature_support.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_health.py fix(tests): swap dall-e to gpt-image-1 after openai deprecation 2026-05-12 16:55:18 -07:00
test_keys.py fix(tests): swap dall-e to gpt-image-1 after openai deprecation 2026-05-12 16:55:18 -07:00
test_litellm_proxy_responses_config.py chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
test_logging.conf
test_models.py test: replace test_add_and_delete_models integration test with mock 2026-03-30 21:30:57 -07:00
test_new_vector_store_endpoints.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_openai_endpoints.py fix(tests): swap dall-e to gpt-image-1 after openai deprecation 2026-05-12 16:55:18 -07:00
test_organizations.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_otel_thread_leak.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_passthrough_endpoints.py
test_presidio_latency.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_proxy_server_non_root.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_ratelimit.py chore(ci): modernize model references in tests and configs (#27856) 2026-05-15 15:44:28 -07:00
test_resource_cleanup.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_service_logger_otel.py
test_spend_logs.py
test_team.py style: run black formatter on files from main merge 2026-04-17 13:02:59 -07:00
test_team_logging.py test: cleanup dead tests 2026-03-28 20:49:02 -07:00
test_team_members.py
test_users.py Fix: tag budget reset must drop stale management-cache entry (#27568) 2026-05-10 00:18:55 +00:00

In total litellm runs 1000+ tests

[02/20/2025] Update:

To make it easier to contribute and map what behavior is tested,

we've started mapping the litellm directory in tests/test_litellm

This folder can only run mock tests.