forked from phoenix/litellm-mirror
Litellm dev 11 23 2024 (#6881)
* build(ui/create_key_button.tsx): support adding tags for cost tracking/routing when making key * LiteLLM Minor Fixes & Improvements (11/23/2024) (#6870) * feat(pass_through_endpoints/): support logging anthropic/gemini pass through calls to langfuse/s3/etc. * fix(utils.py): allow disabling end user cost tracking with new param Allows proxy admin to disable cost tracking for end user - keeps prometheus metrics small * docs(configs.md): add disable_end_user_cost_tracking reference to docs * feat(key_management_endpoints.py): add support for restricting access to `/key/generate` by team/proxy level role Enables admin to restrict key creation, and assign team admins to handle distributing keys * test(test_key_management.py): add unit testing for personal / team key restriction checks * docs: add docs on restricting key creation * docs(finetuned_models.md): add new guide on calling finetuned models * docs(input.md): cleanup anthropic supported params Closes https://github.com/BerriAI/litellm/issues/6856 * test(test_embedding.py): add test for passing extra headers via embedding * feat(cohere/embed): pass client to async embedding * feat(rerank.py): add `/v1/rerank` if missing for cohere base url Closes https://github.com/BerriAI/litellm/issues/6844 * fix(main.py): pass extra_headers param to openai Fixes https://github.com/BerriAI/litellm/issues/6836 * fix(litellm_logging.py): don't disable global callbacks when dynamic callbacks are set Fixes issue where global callbacks - e.g. prometheus were overriden when langfuse was set dynamically * fix(handler.py): fix linting error * fix: fix typing * build: add conftest to proxy_admin_ui_tests/ * test: fix test * fix: fix linting errors * test: fix test * fix: fix pass through testing * feat(key_management_endpoints.py): allow proxy_admin to enforce params on key creation allows admin to force team keys to have tags * build(ui/): show teams in leftnav + allow team admin to add new members * build(ui/): show created tags in dropdown makes it easier for admin to add tags to keys * test(test_key_management.py): fix test * test: fix test * fix playwright e2e ui test * fix e2e ui testing deps * fix: fix linting errors * fix e2e ui testing * fix e2e ui testing, only run e2e ui testing in playwright --------- Co-authored-by: Ishaan Jaff <ishaanjaffer0324@gmail.com>
This commit is contained in:
parent
6b6353d4e7
commit
424b8b0231
9 changed files with 270 additions and 80 deletions
|
@ -551,7 +551,7 @@ def test_is_team_key():
|
|||
assert not _is_team_key(GenerateKeyRequest(user_id="test_user_id"))
|
||||
|
||||
|
||||
def test_team_key_generation_check():
|
||||
def test_team_key_generation_team_member_check():
|
||||
from litellm.proxy.management_endpoints.key_management_endpoints import (
|
||||
_team_key_generation_check,
|
||||
)
|
||||
|
@ -562,22 +562,86 @@ def test_team_key_generation_check():
|
|||
}
|
||||
|
||||
assert _team_key_generation_check(
|
||||
UserAPIKeyAuth(
|
||||
user_api_key_dict=UserAPIKeyAuth(
|
||||
user_role=LitellmUserRoles.INTERNAL_USER,
|
||||
api_key="sk-1234",
|
||||
team_member=Member(role="admin", user_id="test_user_id"),
|
||||
)
|
||||
),
|
||||
data=GenerateKeyRequest(),
|
||||
)
|
||||
|
||||
with pytest.raises(HTTPException):
|
||||
_team_key_generation_check(
|
||||
UserAPIKeyAuth(
|
||||
user_api_key_dict=UserAPIKeyAuth(
|
||||
user_role=LitellmUserRoles.INTERNAL_USER,
|
||||
api_key="sk-1234",
|
||||
user_id="test_user_id",
|
||||
team_member=Member(role="user", user_id="test_user_id"),
|
||||
),
|
||||
data=GenerateKeyRequest(),
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"team_key_generation_settings, input_data, expected_result",
|
||||
[
|
||||
({"required_params": ["tags"]}, GenerateKeyRequest(tags=["test_tags"]), True),
|
||||
({}, GenerateKeyRequest(), True),
|
||||
(
|
||||
{"required_params": ["models"]},
|
||||
GenerateKeyRequest(tags=["test_tags"]),
|
||||
False,
|
||||
),
|
||||
],
|
||||
)
|
||||
@pytest.mark.parametrize("key_type", ["team_key", "personal_key"])
|
||||
def test_key_generation_required_params_check(
|
||||
team_key_generation_settings, input_data, expected_result, key_type
|
||||
):
|
||||
from litellm.proxy.management_endpoints.key_management_endpoints import (
|
||||
_team_key_generation_check,
|
||||
_personal_key_generation_check,
|
||||
)
|
||||
from litellm.types.utils import (
|
||||
TeamUIKeyGenerationConfig,
|
||||
StandardKeyGenerationConfig,
|
||||
PersonalUIKeyGenerationConfig,
|
||||
)
|
||||
from fastapi import HTTPException
|
||||
|
||||
user_api_key_dict = UserAPIKeyAuth(
|
||||
user_role=LitellmUserRoles.INTERNAL_USER,
|
||||
api_key="sk-1234",
|
||||
user_id="test_user_id",
|
||||
team_id="test_team_id",
|
||||
team_member=Member(role="admin", user_id="test_user_id"),
|
||||
)
|
||||
|
||||
if key_type == "team_key":
|
||||
litellm.key_generation_settings = StandardKeyGenerationConfig(
|
||||
team_key_generation=TeamUIKeyGenerationConfig(
|
||||
**team_key_generation_settings
|
||||
)
|
||||
)
|
||||
elif key_type == "personal_key":
|
||||
litellm.key_generation_settings = StandardKeyGenerationConfig(
|
||||
personal_key_generation=PersonalUIKeyGenerationConfig(
|
||||
**team_key_generation_settings
|
||||
)
|
||||
)
|
||||
|
||||
if expected_result:
|
||||
if key_type == "team_key":
|
||||
assert _team_key_generation_check(user_api_key_dict, input_data)
|
||||
elif key_type == "personal_key":
|
||||
assert _personal_key_generation_check(user_api_key_dict, input_data)
|
||||
else:
|
||||
if key_type == "team_key":
|
||||
with pytest.raises(HTTPException):
|
||||
_team_key_generation_check(user_api_key_dict, input_data)
|
||||
elif key_type == "personal_key":
|
||||
with pytest.raises(HTTPException):
|
||||
_personal_key_generation_check(user_api_key_dict, input_data)
|
||||
|
||||
|
||||
def test_personal_key_generation_check():
|
||||
|
@ -591,16 +655,18 @@ def test_personal_key_generation_check():
|
|||
}
|
||||
|
||||
assert _personal_key_generation_check(
|
||||
UserAPIKeyAuth(
|
||||
user_api_key_dict=UserAPIKeyAuth(
|
||||
user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234", user_id="admin"
|
||||
)
|
||||
),
|
||||
data=GenerateKeyRequest(),
|
||||
)
|
||||
|
||||
with pytest.raises(HTTPException):
|
||||
_personal_key_generation_check(
|
||||
UserAPIKeyAuth(
|
||||
user_api_key_dict=UserAPIKeyAuth(
|
||||
user_role=LitellmUserRoles.INTERNAL_USER,
|
||||
api_key="sk-1234",
|
||||
user_id="admin",
|
||||
)
|
||||
),
|
||||
data=GenerateKeyRequest(),
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue