mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-07 08:26:10 +00:00
The caching-local, proxy-extras and enterprise-package shards each budget pytest 20m but cap the whole job at 55m. Setup can consume up to 35m, and the runner adds 5m of overhead, so the job deadline can preempt pytest inside its own advertised budget and the shard dies without a test report. check_workflow_startup_safety enforces that invariant and is currently failing on litellm_internal_staging, which reds the code-quality job for every open PR. Raising the three caps to 60m satisfies 20 + 35 + 5.
249 lines
9.1 KiB
YAML
249 lines
9.1 KiB
YAML
name: "Unit Tests"
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
- litellm_internal_staging
|
|
- litellm_oss_staging
|
|
- "litellm_**"
|
|
push:
|
|
branches:
|
|
- main
|
|
- litellm_internal_staging
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
# One caller for every tests/test_litellm shard, replacing the nine thin workflow
|
|
# files that each wrapped a single call to _test-unit-base.yml. Adding a shard is
|
|
# now one matrix entry rather than a new file.
|
|
#
|
|
# `name` is the shard id and nothing else, so each check reports as
|
|
# "<shard> / Run tests" exactly as it did when the shard had its own file. Those
|
|
# strings are the branch ruleset's required contexts, so they are load-bearing:
|
|
# renaming an entry renames a required check and the ruleset stops matching it.
|
|
#
|
|
# Every entry states its timeouts even when they equal the base workflow's
|
|
# defaults. An absent matrix key renders as an empty string, which is not a
|
|
# number, so a partially-specified entry would fail the call rather than fall
|
|
# back to the default.
|
|
#
|
|
# tests/proxy_unit_tests keeps its own caller (test-unit-proxy-db.yml): it is
|
|
# already a matrix and carries a shard-coverage guard that reads that file by
|
|
# name. Folding it in here is a follow-up, together with generalising that guard
|
|
# into assert_ci_coverage.py.
|
|
jobs:
|
|
unit:
|
|
name: ${{ matrix.shard }}
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
pull-requests: write
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- shard: core-utils
|
|
artifact-name: core-utils
|
|
test-path: "tests/test_litellm/litellm_core_utils"
|
|
workers: 2
|
|
reruns: 1
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: enterprise-routing
|
|
artifact-name: enterprise-routing
|
|
test-path: >-
|
|
tests/test_litellm/enterprise
|
|
tests/test_litellm/google_genai
|
|
tests/test_litellm/router_utils
|
|
tests/test_litellm/router_strategy
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: integrations
|
|
artifact-name: integrations
|
|
test-path: "tests/test_litellm/integrations"
|
|
workers: 2
|
|
reruns: 3
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: Vertex AI
|
|
artifact-name: llm-vertex-ai
|
|
test-path: "tests/test_litellm/llms/vertex_ai"
|
|
workers: 1
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: All Other Providers
|
|
artifact-name: llm-other-providers
|
|
test-path: "tests/test_litellm/llms --ignore=tests/test_litellm/llms/vertex_ai"
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: misc
|
|
artifact-name: misc
|
|
test-path: >-
|
|
tests/test_litellm/batches
|
|
tests/test_litellm/secret_managers
|
|
tests/test_litellm/a2a_protocol
|
|
tests/test_litellm/anthropic_interface
|
|
tests/test_litellm/completion_extras
|
|
tests/test_litellm/compression
|
|
tests/test_litellm/containers
|
|
tests/test_litellm/experimental_mcp_client
|
|
tests/test_litellm/models
|
|
tests/test_litellm/repositories
|
|
tests/test_litellm/images
|
|
tests/test_litellm/interactions
|
|
tests/test_litellm/ocr
|
|
tests/test_litellm/passthrough
|
|
tests/test_litellm/rag
|
|
tests/test_litellm/realtime_api
|
|
tests/test_litellm/rerank_api
|
|
tests/test_litellm/rust_bridge
|
|
tests/test_litellm/sandbox
|
|
tests/test_litellm/test_router
|
|
tests/test_litellm/vector_stores
|
|
tests/test_litellm/videos
|
|
tests/test_litellm/test_*.py
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: proxy-auth
|
|
artifact-name: proxy-auth
|
|
test-path: >-
|
|
tests/test_litellm/proxy/auth
|
|
tests/test_litellm/proxy/hooks
|
|
tests/test_litellm/proxy/policy_engine
|
|
tests/test_litellm/proxy/client
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: proxy-endpoints
|
|
artifact-name: proxy-endpoints
|
|
test-path: >-
|
|
tests/test_litellm/proxy/analytics_endpoints
|
|
tests/test_litellm/proxy/management_endpoints
|
|
tests/test_litellm/proxy/memory
|
|
tests/test_litellm/proxy/guardrails
|
|
tests/test_litellm/proxy/management_helpers
|
|
tests/test_litellm/proxy/anthropic_endpoints
|
|
tests/test_litellm/proxy/google_endpoints
|
|
tests/test_litellm/proxy/openai_files_endpoint
|
|
tests/test_litellm/proxy/batches_endpoints
|
|
tests/test_litellm/proxy/fine_tuning_endpoints
|
|
tests/test_litellm/proxy/vector_store_files_endpoints
|
|
tests/test_litellm/proxy/video_endpoints
|
|
tests/test_litellm/proxy/response_api_endpoints
|
|
tests/test_litellm/proxy/image_endpoints
|
|
tests/test_litellm/proxy/ocr_endpoints
|
|
tests/test_litellm/proxy/vector_store_endpoints
|
|
tests/test_litellm/proxy/agent_endpoints
|
|
tests/test_litellm/proxy/a2a
|
|
tests/test_litellm/proxy/credential_endpoints
|
|
tests/test_litellm/proxy/discovery_endpoints
|
|
tests/test_litellm/proxy/health_endpoints
|
|
tests/test_litellm/proxy/shutdown
|
|
tests/test_litellm/proxy/public_endpoints
|
|
tests/test_litellm/proxy/prompts
|
|
tests/test_litellm/proxy/rag_endpoints
|
|
tests/test_litellm/proxy/realtime_endpoints
|
|
tests/test_litellm/proxy/ui_crud_endpoints
|
|
tests/test_litellm/proxy/config_resolvers
|
|
tests/test_litellm/proxy/utils
|
|
workers: 4
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: proxy-server
|
|
artifact-name: proxy-server
|
|
test-path: "tests/test_litellm/proxy/proxy_server"
|
|
workers: 4
|
|
reruns: 2
|
|
timeout-minutes: 60
|
|
job-timeout-minutes: 100
|
|
|
|
- shard: proxy-infra
|
|
artifact-name: proxy-infra
|
|
test-path: >-
|
|
tests/test_litellm/proxy/db
|
|
tests/test_litellm/proxy/middleware
|
|
tests/test_litellm/proxy/spend_tracking
|
|
tests/test_litellm/proxy/pass_through_endpoints
|
|
tests/test_litellm/proxy/_experimental
|
|
tests/test_litellm/proxy/experimental
|
|
tests/test_litellm/proxy/common_utils
|
|
tests/test_litellm/proxy/enterprise_billing
|
|
tests/test_litellm/proxy/types_utils
|
|
tests/test_litellm/proxy/logging_endpoints
|
|
tests/test_litellm/proxy/test_*.py
|
|
workers: 4
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: caching-local
|
|
artifact-name: caching-local
|
|
test-path: >-
|
|
tests/local_testing/test_cache_preset_key.py
|
|
tests/local_testing/test_caching_handler.py
|
|
tests/local_testing/test_prompt_caching.py
|
|
tests/local_testing/test_responses_stream_cache_keys.py
|
|
tests/local_testing/test_unit_test_caching.py
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: proxy-extras
|
|
artifact-name: proxy-extras
|
|
test-path: "tests/litellm-proxy-extras"
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: enterprise-package
|
|
artifact-name: enterprise-package
|
|
test-path: "tests/enterprise"
|
|
workers: 4
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
|
|
- shard: responses-caching-types
|
|
artifact-name: responses-caching-types
|
|
test-path: >-
|
|
tests/test_litellm/responses
|
|
tests/test_litellm/caching
|
|
tests/test_litellm/types
|
|
workers: 2
|
|
reruns: 2
|
|
timeout-minutes: 20
|
|
job-timeout-minutes: 60
|
|
uses: ./.github/workflows/_test-unit-base.yml
|
|
with:
|
|
test-path: ${{ matrix.test-path }}
|
|
workers: ${{ matrix.workers }}
|
|
reruns: ${{ matrix.reruns }}
|
|
timeout-minutes: ${{ matrix.timeout-minutes }}
|
|
job-timeout-minutes: ${{ matrix.job-timeout-minutes }}
|
|
artifact-name: ${{ matrix.artifact-name }}
|