fix(clinepass): address CI — mirrored cost map, logoless set, formatting

Three failures from the first CI run on the PR, all genuine and all local:

- `cost-map-guard`: litellm/model_prices_and_context_window_backup.json is a
  mirror of the root cost map and must be copied over whenever the root changes.
  I did not know that second copy existed.
- `ui-unit-tests`: provider_info_helpers.test.tsx asserts every provider maps to
  a bundled logo *except* a known-logoless set. ClinePass intentionally ships no
  logo -- the `<Logo>` component falls back to a first-letter circle rather than
  an invented asset -- so it belongs in that set, not in the logo map.
- `lint`: `ruff format` on litellm/main.py and the endpoint-guard test.

Not fixed here, because it cannot be: `documentation` and `code-quality` both
fail with "Environment variables read under ./litellm but mentioned nowhere in
the docs: ['CLINEPASS_API_BASE', 'CLINEPASS_API_KEY']". That check resolves docs
by checking out BerriAI/litellm-docs into docs/my-website (the test raises
"check out BerriAI/litellm-docs into docs/my-website" when the directory is
absent), so those two keys stay undocumented until a companion PR lands there.
It is a genuine cross-repo ordering dependency, not something this branch can
satisfy alone.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Daniel JB Clark 2026-10-03 12:25:22 -04:00
parent a6c9f01b39
commit 51214ed26e
No known key found for this signature in database
4 changed files with 8 additions and 9 deletions

View file

@ -2468,9 +2468,7 @@ def _complete_clinepass(ctx: _CompletionDispatchContext) -> _CompletionDispatchR
api_key = api_key or get_secret_str("CLINEPASS_API_KEY") or litellm.api_key
api_base = (
api_base or litellm.api_base or get_secret_str("CLINEPASS_API_BASE") or "https://api.cline.bot/api/v1"
)
api_base = api_base or litellm.api_base or get_secret_str("CLINEPASS_API_BASE") or "https://api.cline.bot/api/v1"
## COMPLETION CALL
response: Final = base_llm_http_handler.completion(

View file

@ -15612,6 +15612,10 @@
"prompt_cache_min_tokens": 1024,
"source": "https://platform.claude.com/docs/en/about-claude/pricing"
},
"clinepass/deepseek-v4-flash": {
"litellm_provider": "clinepass",
"mode": "chat"
},
"cloudflare/clef": {
"input_cost_per_token": 2.4e-07,
"litellm_provider": "cloudflare",

View file

@ -87,13 +87,9 @@ def test_image_generation_makes_no_outbound_request(no_request_allowed):
def test_openai_credential_is_never_transmitted(no_request_allowed):
"""The point of the P1: whatever happens, the OpenAI key must not go out."""
for call in (
lambda: litellm.speech(
model="clinepass/deepseek-v4-flash", input="hi", voice="alloy"
),
lambda: litellm.speech(model="clinepass/deepseek-v4-flash", input="hi", voice="alloy"),
lambda: litellm.transcription(model="clinepass/deepseek-v4-flash", file=None),
lambda: litellm.image_generation(
model="clinepass/deepseek-v4-flash", prompt="a cat"
),
lambda: litellm.image_generation(model="clinepass/deepseek-v4-flash", prompt="a cat"),
):
# Whether each endpoint raises or returns an empty response is upstream's
# business; that no credential leaves the process is ours.

View file

@ -176,6 +176,7 @@ describe("provider_info_helpers", () => {
Providers.AUTO_ROUTER,
Providers.BYTEZ,
Providers.CLARIFAI,
Providers.CLINEPASS,
Providers.Cognition,
Providers.COMPACTIFAI,
Providers.DATAROBOT,