Skip to content

test(e2e): drop vertex from pipecat tool smoke and remove key models dropdown suite - #32838

Closed
mubashir1osmani wants to merge 13 commits into
BerriAI:litellm_internal_stagingfrom
mubashir1osmani:litellm_batch_credentials_e2e
Closed

test(e2e): drop vertex from pipecat tool smoke and remove key models dropdown suite#32838
mubashir1osmani wants to merge 13 commits into
BerriAI:litellm_internal_stagingfrom
mubashir1osmani:litellm_batch_credentials_e2e

Conversation

@mubashir1osmani

Copy link
Copy Markdown
Contributor

Relevant issues

Linear ticket

Pre-Submission checklist

  • I have added meaningful tests
  • My PR passes all CI/CD checks (e.g., lint, format, unit tests)
  • My PR's scope is as isolated as possible; it only solves 1 specific problem
  • I have received a Greptile Confidence Score of at least 4/5 before requesting a maintainer review (Greptile reviews automatically once the PR is opened; only comment @greptileai to re-request a review after pushing changes)

Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).

Screenshots / Proof of Fix

Stage e2e log Logs-2026-07-10 15_39_37.txt (pre this PR image):

  • test_tool_call_round_trip[vertex_ai] PASSED (raw GA websocket path through LiteLLM)
  • test_pipecat_tool_smoke[openai|azure|gemini] PASSED
  • test_pipecat_tool_smoke[vertex_ai] FAILED with pipecat did not invoke the get_weather callback
  • Suite result: 1 failed, 173 passed

That is the same pattern as pipecat-ai/pipecat#2544: LiteLLM Vertex -> OpenAI GA transform is fine under raw-ws; pipecat's tool path is flaky for Vertex native-audio live. After this PR, stage should not collect the vertex pipecat case. Rebuild the e2e image on this SHA and re-run the stage suite for green

Type

✅ Test

Changes

Follow-up to #32744. Stage was red solely on test_pipecat_tool_smoke[vertex_ai] while the raw-websocket Vertex tool round-trip and the other pipecat providers stayed green

Drop vertex_ai from PROVIDER_PARAMS in test_realtime_pipecat_e2e.py so pipecat tool smoke only runs openai, azure, and gemini. Vertex realtime coverage stays on unit transform tests plus raw-ws test_text_conversation / test_tool_call_round_trip. Document that split in REALTIME_COVERAGE_MATRIX.md

Also remove the Playwright test_key_models_dropdown_e2e.py suite so the stage job is not blocked by that UI harness

Point batch deployments at the credential field names and os.environ refs
the gateway actually resolves from process env (compose .env or EKS secret
mounts). Missing secrets skip instead of failing red so a red run means a
product bug. Mirror S3 bucket env aliases in docker-compose for provider_fallback
The batches suite is live e2e only; no monkeypatch or unit-level tests
Keep object-storage fields through CredentialLiteLLMParams and resolve
os.environ/ refs when reading deployment credentials so Vertex/Bedrock
batch file uploads see bucket and AWS keys from K8s/docker env

Skip managed batch list when the request is provider-scoped so
/{provider}/v1/batches list works instead of 500

Force DB on check_db_only team lookups and stop masking non-404 errors
as "team doesn't exist"

Drop e2e runner-side skip helpers; hard-fail on missing gateway secrets
Reseed spend:tag counters from LiteLLM_TagTable so cold redis still
enforces after the spend writer flushes

When applying post-call cost to team multi-window counters, load the
team from the DB if it is missing from the management cache so window
spend is not dropped on cache misses

Harden cold-counter reseed e2e (namespace-aware keys, burst success,
poll). Give tag budget more headroom. Retry /key/update on redis DNS
blips. Ensure NLTK punkt_tab is present for pipecat realtime audio
Reverts all litellm/ and unit-test product edits. This branch is limited
to tests/e2e per contributor instruction
provider_fallback list falls back when managed batches reject provider
filtering. Team create waits for /team/info and member_add retries on
transient team-not-found so split control-plane lag does not red the suite
Leave local .env and docker-compose env wiring as the secret source
OpenAI/Azure batch file uploads need files_settings; budget reset e2e needs a
short rescheduler window. Drop unsupported bedrock-encoded create_batch cells,
tolerate bedrock file.bytes=0, and surface team-info wait failures instead of
hanging silently
When provider-scoped list is rejected, still fetch the unfiltered list and
check the envelope. Only skip membership when the id is a raw
provider_fallback batch that managed list cannot index
Stage and local proxy runs have no Admin UI driver; these tests only
produced setup timeouts and were out of scope for the API e2e gate
Raw-websocket tool_call_round_trip already covers tool calling through the
proxy for every provider, including vertex. The pipecat tool smoke only
asserts coarse callback/text signals and is known flaky upstream
(pipecat-ai/pipecat#2544); stage runs fail pipecat for vertex while raw-ws
passes, so the smoke adds noise without a LiteLLM signal
Restore the pipecat tool smoke suite for openai/azure/gemini. Vertex
native-audio live remains covered by raw-ws tool_call_round_trip; pipecat
tool calling for that provider is flaky upstream and reds the stage suite
@mubashir1osmani

Copy link
Copy Markdown
Contributor Author

Superseded by a clean branch off litellm_internal_staging; this PR re-listed already-merged commits from #32744

@greptile-apps

greptile-apps Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR hardens the e2e test suite in three main ways: it drops vertex_ai from the pipecat tool-smoke parametrize list (matching known upstream flakiness in pipecat-ai/pipecat#2544), removes the Playwright key-models-dropdown suite that was blocking stage, and adds/improves budget, batch, and management test infrastructure with retry guards, a new test_budget_reset_advances_e2e.py regression suite, and docker-compose env plumbing for cloud providers.

  • Pipecat / realtime: vertex_ai removed from PROVIDER_PARAMS in test_realtime_pipecat_e2e.py; raw-ws Vertex coverage stays intact; REALTIME_COVERAGE_MATRIX.md updated to document the split.
  • Batches: capabilities.py gains proper AWS/GCS credential forwarding for Bedrock and Vertex; BEDROCK_SCENARIOS is narrowed to (\"unified\",) only; assert_file_object conditionally skips the bytes > 0 check for Bedrock.
  • Budgets / management: New test_budget_reset_advances_e2e.py adds six progressive regression rungs for feat: multiple concurrent budget windows per API key and team (#24883) #25109; budget_client.py and management_client.py add _wait_for_team polling and retry loops on member-add to absorb creation lag.

Confidence Score: 4/5

Safe to merge for the pipecat and dropdown removals; the batch capabilities changes in capabilities.py warrant a second look before merging.

The Bedrock encoded routing scenario is dropped from the batch test matrix without any explanation of why it was removed or whether it was previously passing. This creates a gap in regression coverage for the provider-fallback Bedrock path. Everything else is well-motivated and correctly implemented.

tests/e2e/batches/capabilities.py (BEDROCK_SCENARIOS narrowing) and tests/e2e/batches/test_batches_e2e.py (assert_file_object bytes weakening for Bedrock)

Important Files Changed

Filename Overview
tests/e2e/llm_translation/realtime/test_realtime_pipecat_e2e.py Drops vertex_ai from PROVIDER_PARAMS with clear justification referencing upstream pipecat-ai/pipecat#2544; raw-ws coverage for vertex is preserved.
tests/e2e/batches/capabilities.py Adds AWS/GCS credentials to provider params and introduces _env_ref helper; silently narrows BEDROCK_SCENARIOS from ("encoded", "unified") to ("unified",) without justification in PR description.
tests/e2e/batches/test_batches_e2e.py Adds provider-aware file.bytes assertion and managed-filter fallback for list_batches; weakens the bytes>0 guard for Bedrock without explaining the upstream limitation.
tests/e2e/budgets/budget_client.py Adds _wait_for_team polling and retry loop on add_team_member to harden team creation race conditions.
tests/e2e/budgets/test_budget_reset_advances_e2e.py New regression-guard suite for #25109; well-structured progressive rungs covering scheduling, enforcement, timestamp advancement, multi-window independence, team-member windows, and the non-5xx error path.
tests/e2e/management/management_client.py Adds _wait_for_team, retry on Redis-connectivity errors in update_key_models, and retry on "doesn't exist" in add_team_member for reliability.
tests/e2e/management/test_key_models_dropdown_e2e.py Entire Playwright UI test suite deleted to unblock stage; removes 4 tests covering teamless/team key create and edit dropdown scoping.
tests/e2e/docker-compose.yml Adds proxy_budget_rescheduler min/max time settings, files_settings for OpenAI/Azure, and passes through all required cloud provider env vars to the container.

Comments Outside Diff (2)

  1. tests/e2e/batches/test_batches_e2e.py, line 130-134 (link)

    P2 file.bytes > 0 assertion weakened for Bedrock without upstream citation

    The check is now skipped for provider == "bedrock", allowing file.bytes == 0 to pass silently. If the Bedrock Files API genuinely returns 0 for bytes on a non-empty upload, a comment citing the upstream behaviour would make it clear this is adapting to a real limitation rather than masking a regression.

    Rule Used: What: Flag any modifications to existing tests and... (source)

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

  2. tests/e2e/budgets/budget_client.py, line 240-255 (link)

    P2 _wait_for_team / _TEAM_READY_* constants duplicated in management_client.py

    Identical constants and an identical _wait_for_team method appear verbatim in tests/e2e/management/management_client.py. Both modules already share helpers from e2e_http and e2e_gateway, so extracting this polling logic into a shared utility would prevent the two copies drifting.

    Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Reviews (1): Last reviewed commit: "test(e2e): drop only vertex from pipecat..." | Re-trigger Greptile

@@ -84,14 +91,6 @@ def id(self) -> str:

@property
def jsonl_model(self) -> str:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Bedrock "encoded" scenario silently removed

BEDROCK_SCENARIOS previously ran both "encoded" and "unified" paths for Bedrock. Dropping "encoded" removes coverage of the provider-fallback routing scenario for Bedrock — the path that returns a raw (non-re-encoded) batch ID and exercises a different ID-shape branch in raw_id_matches_provider. The PR description and COVERAGE.md note the change ("yes (unified only)") but give no reason why the encoded path was removed. If it was failing, the failure mode should be documented; if it was passing, removing it weakens the regression guarantee for that routing path.

Rule Used: What: Flag any modifications to existing tests and... (source)

@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@codspeed-hq

codspeed-hq Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 31 untouched benchmarks


Comparing mubashir1osmani:litellm_batch_credentials_e2e (c0664ac) with litellm_internal_staging (eb7e4a5)

Open in CodSpeed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant