forked from phoenix/litellm-mirror
* 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
226 lines
7.1 KiB
Markdown
226 lines
7.1 KiB
Markdown
import Image from '@theme/IdealImage';
|
|
import Tabs from '@theme/Tabs';
|
|
import TabItem from '@theme/TabItem';
|
|
|
|
# Internal User Self-Serve
|
|
|
|
## Allow users to create their own keys on [Proxy UI](./ui.md).
|
|
|
|
1. Add user with permissions to a team on proxy
|
|
|
|
<Tabs>
|
|
<TabItem value="ui" label="UI">
|
|
|
|
Go to `Internal Users` -> `+New User`
|
|
|
|
<Image img={require('../../img/add_internal_user.png')} style={{ width: '800px', height: 'auto' }} />
|
|
|
|
</TabItem>
|
|
<TabItem value="api" label="API">
|
|
|
|
Create a new Internal User on LiteLLM and assign them the role `internal_user`.
|
|
|
|
```bash
|
|
curl -X POST '<PROXY_BASE_URL>/user/new' \
|
|
-H 'Authorization: Bearer <PROXY_MASTER_KEY>' \
|
|
-H 'Content-Type: application/json' \
|
|
-D '{
|
|
"user_email": "krrishdholakia@gmail.com",
|
|
"user_role": "internal_user" # 👈 THIS ALLOWS USER TO CREATE/VIEW/DELETE THEIR OWN KEYS + SEE THEIR SPEND
|
|
}'
|
|
```
|
|
|
|
Expected Response
|
|
|
|
```bash
|
|
{
|
|
"user_id": "e9d45c7c-b20b-4ff8-ae76-3f479a7b1d7d", 👈 USE IN STEP 2
|
|
"user_email": "<YOUR_USERS_EMAIL>",
|
|
"user_role": "internal_user",
|
|
...
|
|
}
|
|
```
|
|
|
|
Here's the available UI roles for a LiteLLM Internal User:
|
|
|
|
Admin Roles:
|
|
- `proxy_admin`: admin over the platform
|
|
- `proxy_admin_viewer`: can login, view all keys, view all spend. **Cannot** create/delete keys, add new users.
|
|
|
|
Internal User Roles:
|
|
- `internal_user`: can login, view/create/delete their own keys, view their spend. **Cannot** add new users.
|
|
- `internal_user_viewer`: can login, view their own keys, view their own spend. **Cannot** create/delete keys, add new users.
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
2. Share invitation link with user
|
|
|
|
<Tabs>
|
|
<TabItem value="ui" label="UI">
|
|
|
|
Copy the invitation link with the user
|
|
|
|
<Image img={require('../../img/invitation_link.png')} style={{ width: '800px', height: 'auto' }} />
|
|
|
|
</TabItem>
|
|
<TabItem value="api" label="API">
|
|
|
|
```bash
|
|
curl -X POST '<PROXY_BASE_URL>/invitation/new' \
|
|
-H 'Authorization: Bearer <PROXY_MASTER_KEY>' \
|
|
-H 'Content-Type: application/json' \
|
|
-D '{
|
|
"user_id": "e9d45c7c-b20b..." # 👈 USER ID FROM STEP 1
|
|
}'
|
|
```
|
|
|
|
Expected Response
|
|
|
|
```bash
|
|
{
|
|
"id": "a2f0918f-43b0-4770-a664-96ddd192966e",
|
|
"user_id": "e9d45c7c-b20b..",
|
|
"is_accepted": false,
|
|
"accepted_at": null,
|
|
"expires_at": "2024-06-13T00:02:16.454000Z", # 👈 VALID FOR 7d
|
|
"created_at": "2024-06-06T00:02:16.454000Z",
|
|
"created_by": "116544810872468347480",
|
|
"updated_at": "2024-06-06T00:02:16.454000Z",
|
|
"updated_by": "116544810872468347480"
|
|
}
|
|
```
|
|
|
|
Invitation Link:
|
|
|
|
```bash
|
|
http://0.0.0.0:4000/ui/onboarding?id=a2f0918f-43b0-4770-a664-96ddd192966e
|
|
|
|
# <YOUR_PROXY_BASE_URL>/ui/onboarding?id=<id>
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
:::info
|
|
|
|
Use [Email Notifications](./email.md) to email users onboarding links
|
|
|
|
:::
|
|
|
|
3. User logs in via email + password auth
|
|
|
|
<Image img={require('../../img/ui_clean_login.png')} style={{ width: '500px', height: 'auto' }} />
|
|
|
|
|
|
|
|
:::info
|
|
|
|
LiteLLM Enterprise: Enable [SSO login](./ui.md#setup-ssoauth-for-ui)
|
|
|
|
:::
|
|
|
|
4. User can now create their own keys
|
|
|
|
|
|
<Image img={require('../../img/ui_self_serve_create_key.png')} style={{ width: '800px', height: 'auto' }} />
|
|
|
|
## Allow users to View Usage, Caching Analytics
|
|
|
|
1. Go to Internal Users -> +Invite User
|
|
|
|
Set their role to `Admin Viewer` - this means they can only view usage, caching analytics
|
|
|
|
<Image img={require('../../img/ui_invite_user.png')} style={{ width: '800px', height: 'auto' }} />
|
|
<br />
|
|
|
|
2. Share invitation link with user
|
|
|
|
|
|
<Image img={require('../../img/ui_invite_link.png')} style={{ width: '800px', height: 'auto' }} />
|
|
<br />
|
|
|
|
3. User logs in via email + password auth
|
|
|
|
<Image img={require('../../img/ui_clean_login.png')} style={{ width: '500px', height: 'auto' }} />
|
|
<br />
|
|
|
|
4. User can now view Usage, Caching Analytics
|
|
|
|
<Image img={require('../../img/ui_usage.png')} style={{ width: '800px', height: 'auto' }} />
|
|
|
|
|
|
## Available Roles
|
|
Here's the available UI roles for a LiteLLM Internal User:
|
|
|
|
**Admin Roles:**
|
|
- `proxy_admin`: admin over the platform
|
|
- `proxy_admin_viewer`: can login, view all keys, view all spend. **Cannot** create/delete keys, add new users.
|
|
|
|
**Internal User Roles:**
|
|
- `internal_user`: can login, view/create/delete their own keys, view their spend. **Cannot** add new users.
|
|
- `internal_user_viewer`: can login, view their own keys, view their own spend. **Cannot** create/delete keys, add new users.
|
|
|
|
## Advanced
|
|
### Setting custom logout URLs
|
|
|
|
Set `PROXY_LOGOUT_URL` in your .env if you want users to get redirected to a specific URL when they click logout
|
|
|
|
```
|
|
export PROXY_LOGOUT_URL="https://www.google.com"
|
|
```
|
|
|
|
<Image img={require('../../img/ui_logout.png')} style={{ width: '400px', height: 'auto' }} />
|
|
|
|
|
|
### Set max budget for internal users
|
|
|
|
Automatically apply budget per internal user when they sign up. By default the table will be checked every 10 minutes, for users to reset. To modify this, [see this](./users.md#reset-budgets)
|
|
|
|
```yaml
|
|
litellm_settings:
|
|
max_internal_user_budget: 10
|
|
internal_user_budget_duration: "1mo" # reset every month
|
|
```
|
|
|
|
This sets a max budget of $10 USD for internal users when they sign up.
|
|
|
|
This budget only applies to personal keys created by that user - seen under `Default Team` on the UI.
|
|
|
|
<Image img={require('../../img/max_budget_for_internal_users.png')} style={{ width: '500px', height: 'auto' }} />
|
|
|
|
This budget does not apply to keys created under non-default teams.
|
|
|
|
|
|
### Set max budget for teams
|
|
|
|
[**Go Here**](./team_budgets.md)
|
|
|
|
## **All Settings for Self Serve / SSO Flow**
|
|
|
|
```yaml
|
|
litellm_settings:
|
|
max_internal_user_budget: 10 # max budget for internal users
|
|
internal_user_budget_duration: "1mo" # reset every month
|
|
|
|
default_internal_user_params: # Default Params used when a new user signs in Via SSO
|
|
user_role: "internal_user" # one of "internal_user", "internal_user_viewer", "proxy_admin", "proxy_admin_viewer". New SSO users not in litellm will be created as this user
|
|
max_budget: 100 # Optional[float], optional): $100 budget for a new SSO sign in user
|
|
budget_duration: 30d # Optional[str], optional): 30 days budget_duration for a new SSO sign in user
|
|
models: ["gpt-3.5-turbo"] # Optional[List[str]], optional): models to be used by a new SSO sign in user
|
|
|
|
|
|
upperbound_key_generate_params: # Upperbound for /key/generate requests when self-serve flow is on
|
|
max_budget: 100 # Optional[float], optional): upperbound of $100, for all /key/generate requests
|
|
budget_duration: "10d" # Optional[str], optional): upperbound of 10 days for budget_duration values
|
|
duration: "30d" # Optional[str], optional): upperbound of 30 days for all /key/generate requests
|
|
max_parallel_requests: 1000 # (Optional[int], optional): Max number of requests that can be made in parallel. Defaults to None.
|
|
tpm_limit: 1000 #(Optional[int], optional): Tpm limit. Defaults to None.
|
|
rpm_limit: 1000 #(Optional[int], optional): Rpm limit. Defaults to None.
|
|
|
|
key_generation_settings: # Restricts who can generate keys. [Further docs](./virtual_keys.md#restricting-key-generation)
|
|
team_key_generation:
|
|
allowed_team_member_roles: ["admin"]
|
|
personal_key_generation: # maps to 'Default Team' on UI
|
|
allowed_user_roles: ["proxy_admin"]
|
|
```
|