mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-19 00:01:29 +00:00
POST /credentials let a duplicate name hit the unique index and handed back
Prisma's "Unique constraint failed" as a 500, so callers string-matched that
message to tell a caller mistake from a server fault. The unique violation now
maps to a 409 whose message names the PATCH route, two concurrent creates of
one name agree on it, and the detection lives in a repository helper the five
hand-rolled copies can move onto later
PATCH /credentials/{name} took a CredentialItem body, so the model_id the
Terraform adopt path sent was dropped. It now accepts UpdateCredentialItem and
shares the deployment lookup with create. Both handlers take the router as a
FastAPI dependency instead of reading the proxy global, which is what the
tests override
38 lines
1 KiB
Python
38 lines
1 KiB
Python
"""
|
|
Credential table models.
|
|
|
|
These are the canonical credential types for the proxy. They live in the model
|
|
layer; ``litellm.types.utils`` re-exports them for backwards compatibility.
|
|
"""
|
|
|
|
from collections.abc import Mapping
|
|
|
|
from pydantic import BaseModel, model_validator
|
|
|
|
|
|
class CredentialBase(BaseModel):
|
|
credential_name: str
|
|
credential_info: dict
|
|
|
|
|
|
class CredentialItem(CredentialBase):
|
|
credential_values: dict
|
|
|
|
|
|
class CreateCredentialItem(CredentialBase):
|
|
credential_values: dict | None = None
|
|
model_id: str | None = None
|
|
|
|
@model_validator(mode="before")
|
|
@classmethod
|
|
def check_credential_params(cls, values):
|
|
if not values.get("credential_values") and not values.get("model_id"):
|
|
raise ValueError("Either credential_values or model_id must be set")
|
|
return values
|
|
|
|
|
|
class UpdateCredentialItem(BaseModel):
|
|
credential_name: str
|
|
credential_info: Mapping[str, object]
|
|
credential_values: Mapping[str, object] | None = None
|
|
model_id: str | None = None
|