|
def add_new_model(): |
|
import streamlit as st |
|
import json, requests, uuid |
|
|
|
model_name = st.text_input( |
|
"Model Name - user-facing model name", placeholder="gpt-3.5-turbo" |
|
) |
|
st.subheader("LiteLLM Params") |
|
litellm_model_name = st.text_input( |
|
"Model", placeholder="azure/gpt-35-turbo-us-east" |
|
) |
|
litellm_api_key = st.text_input("API Key") |
|
litellm_api_base = st.text_input( |
|
"API Base", |
|
placeholder="https://my-endpoint.openai.azure.com", |
|
) |
|
litellm_api_version = st.text_input("API Version", placeholder="2023-07-01-preview") |
|
litellm_params = json.loads( |
|
st.text_area( |
|
"Additional Litellm Params (JSON dictionary). [See all possible inputs](https://github.com/BerriAI/litellm/blob/3f15d7230fe8e7492c95a752963e7fbdcaf7bf98/litellm/main.py#L293)", |
|
value={}, |
|
) |
|
) |
|
st.subheader("Model Info") |
|
mode_options = ("completion", "embedding", "image generation") |
|
mode_selected = st.selectbox("Mode", mode_options) |
|
model_info = json.loads( |
|
st.text_area( |
|
"Additional Model Info (JSON dictionary)", |
|
value={}, |
|
) |
|
) |
|
|
|
if st.button("Submit"): |
|
try: |
|
model_info = { |
|
"model_name": model_name, |
|
"litellm_params": { |
|
"model": litellm_model_name, |
|
"api_key": litellm_api_key, |
|
"api_base": litellm_api_base, |
|
"api_version": litellm_api_version, |
|
}, |
|
"model_info": { |
|
"id": str(uuid.uuid4()), |
|
"mode": mode_selected, |
|
}, |
|
} |
|
|
|
complete_url = "" |
|
if st.session_state["api_url"].endswith("/"): |
|
complete_url = f"{st.session_state['api_url']}model/new" |
|
else: |
|
complete_url = f"{st.session_state['api_url']}/model/new" |
|
|
|
headers = {"Authorization": f"Bearer {st.session_state['proxy_key']}"} |
|
response = requests.post(complete_url, json=model_info, headers=headers) |
|
|
|
if response.status_code == 200: |
|
st.success("Model added successfully!") |
|
else: |
|
st.error(f"Failed to add model. Status code: {response.status_code}") |
|
|
|
st.success("Form submitted successfully!") |
|
except Exception as e: |
|
raise e |
|
|
|
|
|
def list_models(): |
|
import streamlit as st |
|
import requests |
|
|
|
|
|
if ( |
|
st.session_state.get("api_url", None) is not None |
|
and st.session_state.get("proxy_key", None) is not None |
|
): |
|
|
|
try: |
|
complete_url = "" |
|
if isinstance(st.session_state["api_url"], str) and st.session_state[ |
|
"api_url" |
|
].endswith("/"): |
|
complete_url = f"{st.session_state['api_url']}models" |
|
else: |
|
complete_url = f"{st.session_state['api_url']}/models" |
|
response = requests.get( |
|
complete_url, |
|
headers={"Authorization": f"Bearer {st.session_state['proxy_key']}"}, |
|
) |
|
|
|
if response.status_code == 200: |
|
models = response.json() |
|
st.write(models) |
|
else: |
|
st.error(f"Failed to get models. Status code: {response.status_code}") |
|
except Exception as e: |
|
st.error(f"An error occurred while requesting models: {e}") |
|
else: |
|
st.warning( |
|
"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." |
|
) |
|
|
|
|
|
def create_key(): |
|
import streamlit as st |
|
import json, requests, uuid |
|
|
|
if ( |
|
st.session_state.get("api_url", None) is not None |
|
and st.session_state.get("proxy_key", None) is not None |
|
): |
|
duration = st.text_input("Duration - Can be in (h,m,s)", placeholder="1h") |
|
|
|
models = st.text_input("Models it can access (separated by comma)", value="") |
|
models = models.split(",") if models else [] |
|
|
|
additional_params = json.loads( |
|
st.text_area( |
|
"Additional Key Params (JSON dictionary). [See all possible inputs](https://litellm-api.up.railway.app/#/key%20management/generate_key_fn_key_generate_post)", |
|
value={}, |
|
) |
|
) |
|
|
|
if st.button("Submit"): |
|
try: |
|
key_post_body = { |
|
"duration": duration, |
|
"models": models, |
|
**additional_params, |
|
} |
|
|
|
complete_url = "" |
|
if st.session_state["api_url"].endswith("/"): |
|
complete_url = f"{st.session_state['api_url']}key/generate" |
|
else: |
|
complete_url = f"{st.session_state['api_url']}/key/generate" |
|
|
|
headers = {"Authorization": f"Bearer {st.session_state['proxy_key']}"} |
|
response = requests.post( |
|
complete_url, json=key_post_body, headers=headers |
|
) |
|
|
|
if response.status_code == 200: |
|
st.success(f"Key added successfully! - {response.json()}") |
|
else: |
|
st.error(f"Failed to add Key. Status code: {response.status_code}") |
|
|
|
st.success("Form submitted successfully!") |
|
except Exception as e: |
|
raise e |
|
else: |
|
st.warning( |
|
"Please configure the Proxy Endpoint and Proxy Key on the Proxy Setup page." |
|
) |
|
|
|
|
|
def streamlit_ui(): |
|
import streamlit as st |
|
|
|
st.header("Admin Configuration") |
|
|
|
|
|
st.sidebar.title("Navigation") |
|
page = st.sidebar.radio( |
|
"Go to", ("Proxy Setup", "Add Models", "List Models", "Create Key") |
|
) |
|
|
|
|
|
if "api_url" not in st.session_state: |
|
st.session_state["api_url"] = None |
|
if "proxy_key" not in st.session_state: |
|
st.session_state["proxy_key"] = None |
|
|
|
|
|
if page == "Proxy Setup": |
|
|
|
input_api_url = st.text_input( |
|
"Proxy Endpoint", |
|
value=st.session_state.get("api_url", ""), |
|
placeholder="http://0.0.0.0:8000", |
|
) |
|
input_proxy_key = st.text_input( |
|
"Proxy Key", |
|
value=st.session_state.get("proxy_key", ""), |
|
placeholder="sk-...", |
|
) |
|
|
|
if st.button("Save"): |
|
st.session_state["api_url"] = input_api_url |
|
st.session_state["proxy_key"] = input_proxy_key |
|
st.success("Configuration saved!") |
|
elif page == "Add Models": |
|
add_new_model() |
|
elif page == "List Models": |
|
list_models() |
|
elif page == "Create Key": |
|
create_key() |
|
|
|
|
|
if __name__ == "__main__": |
|
streamlit_ui() |
|
|